static GLuint make_texture(const char *filename) { int width, height; void *pixels = read_tga(filename, &width, &height); GLuint texture; if (!pixels) return 0; glGenTextures(1, &texture); glBindTexture(GL_TEXTURE_2D, texture); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glTexImage2D( GL_TEXTURE_2D, 0, /* target, level */ GL_RGB8, /* internal format */ width, height, 0, /* width, height, border */ GL_BGR, GL_UNSIGNED_BYTE, /* external format, type */ pixels /* pixels */ ); free(pixels); return texture; }
static GLuint make_texture(const char*filename) { GLuint texture; int width, height; void *pixels = read_tga(filename, &width, &height); if(!pixels) { return 0; } glGenTextures(1, &texture); glBindTexture(GL_TEXTURE_2D, texture); // opengl uses s, t, r axis // where t can be up or down and the other two are arbitrary // since tag store pixels left-to-right and bottom-to-top glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); // the following function allocates memory for the texture glTexImage2D( GL_TEXTURE_2D, 0, /* target, level of detail */ GL_RGB8, /* internal format*/ width, height, 0, /* width, height, border*/ GL_BGR, GL_UNSIGNED_BYTE, /*external format, type*/ pixels); /* the pixels*/ free(pixels); return texture; }
GLuint Texture::loadTGATexture(const std::string& imagepath, GLenum wrap_s, GLenum wrap_t, GLenum mag_filter, GLenum min_filter, bool anisotropy) { int width, height, depth; char * datas = read_tga(imagepath.data(), width, height, depth); GLuint textureID=0; glGenTextures(1,&textureID); glBindTexture(GL_TEXTURE_2D, textureID); glTexImage2D(GL_TEXTURE_2D, 0 , GL_RGB, width, height, 0, GL_BGR, GL_UNSIGNED_BYTE, datas); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, wrap_s); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, wrap_t); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, mag_filter); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, min_filter); glGenerateMipmap(GL_TEXTURE_2D); if(anisotropy) { GLfloat maxAniso = 0.0f; glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &maxAniso); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, maxAniso); } return textureID; }
GLuint loadTGATexture(const std::string& imagepath, GLenum wrap_s, GLenum wrap_t, GLenum mag_filter, GLenum min_filter, float anisotropy)/*{{{*/ { //!todo [Textures] exercice 1: load a texture from a file into the GPU as follows, // 1) Generate a texture location in GPU // 2) Make it active (bind it) // 3) Load the texture file into a CPU buffer // (using the read_tga routine from utils/textures.h) // 4) Send this data to the GPU (glTexImage2D) // 5) Set up the Wrap and filter parameters. // Create one OpenGL texture GLuint textureID=0; glGenTextures(1, &textureID); glBindTexture(GL_TEXTURE_2D, textureID); int width, height; char* texture = read_tga(imagepath.c_str(), width, height); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_BGR, GL_UNSIGNED_BYTE, texture); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, wrap_s); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, wrap_t); // Interpolation method glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, mag_filter); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, min_filter); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, anisotropy); glGenerateMipmap(GL_TEXTURE_2D); return textureID; }/*}}}*/
Matrix<Color> read_img(std::string filename) { std::size_t n = filename.size(); std::string extension3 = filename.substr(n-3, n); std::string extension4 = filename.substr(n-4, n); if(!extension3.compare("bmp")) { return read_bmp(filename); } else if(!extension3.compare("gif")) { return read_gif(filename); } else if(!extension3.compare("ico")) { return read_ico(filename); } /*else if(!extension3.compare("jpg")) { return read_jpeg(filename); }*/ else if(!extension3.compare("pcx")) { return read_pcx(filename); } else if(!extension3.compare("png")) { return read_png(filename); } else if(!extension3.compare("pbm")) { return bw2colorimage(read_pbm(filename)); } else if(!extension3.compare("pgm")) { return gray2colorimage(read_pgm(filename)); } else if(!extension3.compare("ppm")) { return read_ppm(filename); } else if(!extension3.compare("tga")) { return read_tga(filename); } else if(!extension4.compare("tiff")) { return read_tiff(filename); } else { return Matrix<Color>(); } }