[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [48909] trunk/blender/source/gameengine/ Ketsji: BGE: Better fix for the textures not working with custom shaders regression.
Mitchell Stokes
mogurijin at gmail.com
Sat Jul 14 06:43:38 CEST 2012
Revision: 48909
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=48909
Author: moguri
Date: 2012-07-14 04:43:32 +0000 (Sat, 14 Jul 2012)
Log Message:
-----------
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).
Modified Paths:
--------------
trunk/blender/source/gameengine/Ketsji/KX_BlenderMaterial.cpp
trunk/blender/source/gameengine/Ketsji/KX_BlenderMaterial.h
Modified: trunk/blender/source/gameengine/Ketsji/KX_BlenderMaterial.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_BlenderMaterial.cpp 2012-07-14 04:07:59 UTC (rev 48908)
+++ trunk/blender/source/gameengine/Ketsji/KX_BlenderMaterial.cpp 2012-07-14 04:43:32 UTC (rev 48909)
@@ -154,15 +154,8 @@
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 @@
}
// 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,7 +178,19 @@
}
}
}
+}
+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;
mConstructed = true;
@@ -892,6 +897,9 @@
if (!mShader && !mModified) {
mShader = new BL_Shader();
mModified = true;
+
+ // Using a custom shader, make sure to initialize textures
+ InitTextures();
}
if (mShader && !mShader->GetError()) {
Modified: trunk/blender/source/gameengine/Ketsji/KX_BlenderMaterial.h
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_BlenderMaterial.h 2012-07-14 04:07:59 UTC (rev 48908)
+++ trunk/blender/source/gameengine/Ketsji/KX_BlenderMaterial.h 2012-07-14 04:43:32 UTC (rev 48909)
@@ -138,6 +138,8 @@
bool mModified;
bool mConstructed; // if false, don't clean on exit
+ void InitTextures();
+
void SetBlenderGLSLShader(int layer);
void ActivatGLMaterials( RAS_IRasterizer* rasty )const;
More information about the Bf-blender-cvs
mailing list