diff options
author | Charlie Carley <snailrose@gmail.com> | 2007-03-08 06:00:33 +0300 |
---|---|---|
committer | Charlie Carley <snailrose@gmail.com> | 2007-03-08 06:00:33 +0300 |
commit | f56fca448a21c2e19ee9b365e15eeeb5dfd18f71 (patch) | |
tree | f5b0a00b60e6d2de67cbcd8d32d657489ee25bb3 /source/gameengine/Ketsji | |
parent | 9e2081a5fc078bf8bb040f0befe62156b9592436 (diff) |
Added a guard to prevent more than one texture to be generated per image.
Diffstat (limited to 'source/gameengine/Ketsji')
-rw-r--r-- | source/gameengine/Ketsji/BL_Texture.cpp | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/source/gameengine/Ketsji/BL_Texture.cpp b/source/gameengine/Ketsji/BL_Texture.cpp index dc1024c59e9..d6b57f062f2 100644 --- a/source/gameengine/Ketsji/BL_Texture.cpp +++ b/source/gameengine/Ketsji/BL_Texture.cpp @@ -100,7 +100,6 @@ void BL_Texture::DeleteTex() glDeleteLists((GLuint)mDisableState, 1); mDisableState =0; } - g_textureManager.clear(); } @@ -130,16 +129,34 @@ bool BL_Texture::InitFromImage(int unit, Image *img, bool mipmap) ActivateUnit(mUnit); - if (mTexture != 0) { glBindTexture(GL_TEXTURE_2D, mTexture ); Validate(); return mOk; } + + // look for an existing gl image + BL_TextureMap::iterator mapLook = g_textureManager.find(img->id.name); + if (mapLook != g_textureManager.end()) + { + if (mapLook->second.gl_texture != 0) + { + mTexture = mapLook->second.gl_texture; + glBindTexture(GL_TEXTURE_2D, mTexture); + mOk = IsValid(); + return mOk; + } + } + mNeedsDeleted = 1; glGenTextures(1, (GLuint*)&mTexture); InitGLTex(ibuf->rect, ibuf->x, ibuf->y, mipmap); - + + // track created units + BL_TextureObject obj; + obj.gl_texture = mTexture; + obj.ref_buffer = img; + g_textureManager.insert(std::pair<char*, BL_TextureObject>((char*)img->id.name, obj)); glDisable(GL_TEXTURE_2D); |