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;

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to