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:
authorMitchell Stokes <mogurijin@gmail.com>2012-07-14 08:43:32 +0400
committerMitchell Stokes <mogurijin@gmail.com>2012-07-14 08:43:32 +0400
commitac8c56c6fc9e1a816160144b5cebe2e99ffa67fc (patch)
tree230f0ffa161264ab51f961aa76ec0e33a92f807d /source/gameengine
parentaeaa95a525343d95258e9388076833530a6aa4ab (diff)
BGE: Better fix for the textures not working with custom shaders regression. Now custom shaders work, and textures aren't uploaded twice for GLSL materials (my earlier fix had some bad logic).
Diffstat (limited to 'source/gameengine')
-rw-r--r--source/gameengine/Ketsji/KX_BlenderMaterial.cpp26
-rw-r--r--source/gameengine/Ketsji/KX_BlenderMaterial.h2
2 files changed, 19 insertions, 9 deletions
diff --git a/source/gameengine/Ketsji/KX_BlenderMaterial.cpp b/source/gameengine/Ketsji/KX_BlenderMaterial.cpp
index 79e6c35e6a2..014c68e8bee 100644
--- a/source/gameengine/Ketsji/KX_BlenderMaterial.cpp
+++ b/source/gameengine/Ketsji/KX_BlenderMaterial.cpp
@@ -154,15 +154,8 @@ void KX_BlenderMaterial::ReleaseMaterial()
mBlenderShader->ReloadMaterial();
}
-void KX_BlenderMaterial::OnConstruction(int layer)
+void KX_BlenderMaterial::InitTextures()
{
- if (mConstructed)
- // when material are reused between objects
- return;
-
- if (mMaterial->glslmat)
- SetBlenderGLSLShader(layer);
-
// for each unique material...
int i;
for (i=0; i<mMaterial->num_enabled; i++) {
@@ -177,7 +170,7 @@ void KX_BlenderMaterial::OnConstruction(int layer)
}
// If we're using glsl materials, the textures are handled by bf_gpu, so don't load them twice!
// However, if we're using a custom shader, then we still need to load the textures ourselves.
- else if (!mMaterial->glslmat || mBlenderShader) {
+ else if (!mMaterial->glslmat || mShader) {
if ( mMaterial->img[i] ) {
if ( ! mTextures[i].InitFromImage(i, mMaterial->img[i], (mMaterial->flag[i] &MIPMAP)!=0 ))
spit("unable to initialize image("<<i<<") in "<<
@@ -185,6 +178,18 @@ void KX_BlenderMaterial::OnConstruction(int layer)
}
}
}
+}
+
+void KX_BlenderMaterial::OnConstruction(int layer)
+{
+ if (mConstructed)
+ // when material are reused between objects
+ return;
+
+ if (mMaterial->glslmat)
+ SetBlenderGLSLShader(layer);
+
+ InitTextures();
mBlendFunc[0] =0;
mBlendFunc[1] =0;
@@ -892,6 +897,9 @@ KX_PYMETHODDEF_DOC( KX_BlenderMaterial, getShader , "getShader()")
if (!mShader && !mModified) {
mShader = new BL_Shader();
mModified = true;
+
+ // Using a custom shader, make sure to initialize textures
+ InitTextures();
}
if (mShader && !mShader->GetError()) {
diff --git a/source/gameengine/Ketsji/KX_BlenderMaterial.h b/source/gameengine/Ketsji/KX_BlenderMaterial.h
index 3a6dda06320..8fc86ef9cf2 100644
--- a/source/gameengine/Ketsji/KX_BlenderMaterial.h
+++ b/source/gameengine/Ketsji/KX_BlenderMaterial.h
@@ -138,6 +138,8 @@ private:
bool mModified;
bool mConstructed; // if false, don't clean on exit
+ void InitTextures();
+
void SetBlenderGLSLShader(int layer);
void ActivatGLMaterials( RAS_IRasterizer* rasty )const;