Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCharlie Carley <snailrose@gmail.com>2007-03-08 06:00:33 +0300
committerCharlie Carley <snailrose@gmail.com>2007-03-08 06:00:33 +0300
commitf56fca448a21c2e19ee9b365e15eeeb5dfd18f71 (patch)
treef5b0a00b60e6d2de67cbcd8d32d657489ee25bb3 /source/gameengine/Ketsji/BL_Texture.cpp
parent9e2081a5fc078bf8bb040f0befe62156b9592436 (diff)
Added a guard to prevent more than one texture to be generated per image.
Diffstat (limited to 'source/gameengine/Ketsji/BL_Texture.cpp')
-rw-r--r--source/gameengine/Ketsji/BL_Texture.cpp23
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);