nuclear@48: #include "opengl.h" nuclear@48: #include "imago2.h" nuclear@48: #include "texture.h" nuclear@48: nuclear@48: unsigned int load_texture(const char *fname) nuclear@48: { nuclear@48: struct img_pixmap img; nuclear@48: nuclear@48: img_init(&img); nuclear@48: if(img_load(&img, fname) == -1) { nuclear@48: img_destroy(&img); nuclear@48: return 0; nuclear@48: } nuclear@48: nuclear@48: unsigned int intfmt = img_glintfmt(&img); nuclear@48: unsigned int fmt = img_glfmt(&img); nuclear@48: unsigned int type = img_gltype(&img); nuclear@48: nuclear@48: unsigned int tex; nuclear@48: glGenTextures(1, &tex); nuclear@48: glBindTexture(GL_TEXTURE_2D, tex); nuclear@48: glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); nuclear@48: glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); nuclear@48: glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); nuclear@48: glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); nuclear@48: nuclear@48: if(GLEW_SGIS_generate_mipmap) { nuclear@48: glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP_SGIS, GL_TRUE); nuclear@48: glTexImage2D(GL_TEXTURE_2D, 0, intfmt, img.width, img.height, 0, fmt, type, img.pixels); nuclear@48: } else { nuclear@48: gluBuild2DMipmaps(GL_TEXTURE_2D, intfmt, img.width, img.height, fmt, type, img.pixels); nuclear@48: } nuclear@48: nuclear@48: img_destroy(&img); nuclear@48: return tex; nuclear@48: } nuclear@48: nuclear@48: void destroy_texture(unsigned int tex) nuclear@48: { nuclear@48: glDeleteTextures(1, &tex); nuclear@48: }