istereo2

annotate src/tex.c @ 20:2b85d05df3f2

animation controls for easier screenshot grabbing
author John Tsiombikas <nuclear@member.fsf.org>
date Fri, 02 Oct 2015 04:54:55 +0300
parents
children 9d53a4938ce8
rev   line source
nuclear@2 1 /*
nuclear@2 2 Stereoscopic tunnel for iOS.
nuclear@2 3 Copyright (C) 2011 John Tsiombikas <nuclear@member.fsf.org>
nuclear@2 4
nuclear@2 5 This program is free software: you can redistribute it and/or modify
nuclear@2 6 it under the terms of the GNU General Public License as published by
nuclear@2 7 the Free Software Foundation, either version 3 of the License, or
nuclear@2 8 (at your option) any later version.
nuclear@2 9
nuclear@2 10 This program is distributed in the hope that it will be useful,
nuclear@2 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
nuclear@2 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
nuclear@2 13 GNU General Public License for more details.
nuclear@2 14
nuclear@2 15 You should have received a copy of the GNU General Public License
nuclear@2 16 along with this program. If not, see <http://www.gnu.org/licenses/>.
nuclear@2 17 */
nuclear@2 18
nuclear@2 19 #include <stdio.h>
nuclear@2 20 #include <stdlib.h>
nuclear@2 21 #include <string.h>
nuclear@2 22 #include <errno.h>
nuclear@2 23 #include "opengl.h"
nuclear@2 24 #include "tex.h"
nuclear@2 25 #include "config.h"
nuclear@2 26 #include "imago2.h"
nuclear@2 27
nuclear@2 28 unsigned int load_texture(const char *fname)
nuclear@2 29 {
nuclear@2 30 int xsz, ysz;
nuclear@2 31 unsigned int tex;
nuclear@2 32 void *pixels;
nuclear@2 33
nuclear@2 34 if(!fname) {
nuclear@2 35 return 0;
nuclear@2 36 }
nuclear@2 37 if(!(pixels = img_load_pixels(fname, &xsz, &ysz, IMG_FMT_RGBA32))) {
nuclear@2 38 fprintf(stderr, "failed to load image: %s\n", fname);
nuclear@2 39 return 0;
nuclear@2 40 }
nuclear@2 41
nuclear@2 42 glGenTextures(1, &tex);
nuclear@2 43 glBindTexture(GL_TEXTURE_2D, tex);
nuclear@2 44 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
nuclear@2 45 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
nuclear@2 46 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
nuclear@2 47 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
nuclear@2 48 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, xsz, ysz, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels);
nuclear@2 49 img_free_pixels(pixels);
nuclear@2 50
nuclear@2 51 return tex;
nuclear@2 52 }
nuclear@2 53
nuclear@2 54 void bind_texture(unsigned int tex, int unit)
nuclear@2 55 {
nuclear@2 56 glActiveTexture(GL_TEXTURE0 + unit);
nuclear@2 57
nuclear@2 58 #ifndef IPHONE
nuclear@2 59 if(tex) {
nuclear@2 60 glEnable(GL_TEXTURE_2D);
nuclear@2 61 } else {
nuclear@2 62 glDisable(GL_TEXTURE_2D);
nuclear@2 63 }
nuclear@2 64 #endif
nuclear@2 65
nuclear@2 66 glBindTexture(GL_TEXTURE_2D, tex);
nuclear@2 67 }