diff --git a/src/Engine.cc b/src/Engine.cc index 622941a..2eed72e 100644 --- a/src/Engine.cc +++ b/src/Engine.cc @@ -1349,7 +1349,23 @@ bool Engine::loadWFObjFile(const char *fname, WFObj::Buffer & buff) GLuint Engine::loadTexture(const char *fname) { string path = locateResource(fname); - return m_textureCache.load(path.c_str()); + GLuint id = m_textureCache.load(path.c_str()); + if (id != 0) + { + int width, height; + glBindTexture(GL_TEXTURE_2D, id); + glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &width); + glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT, &height); + char *data = (char *) malloc(4 * width * height); + glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_BYTE, data); + gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGBA, width, height, GL_RGBA, + GL_UNSIGNED_BYTE, data); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, + GL_LINEAR_MIPMAP_LINEAR); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + free(data); + } + return id; } /******** Engine::PickedObject functions ********/