[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