[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [53306] trunk/blender: BGE: "Fix" for issue [#33663] "Objects Share Materials / Textures When Grouped In SingleTexture / MultiTexture Mode" reported by Josiah Lane (solarlune).

Mitchell Stokes mogurijin at gmail.com
Mon Dec 24 04:14:01 CET 2012


Revision: 53306
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=53306
Author:   moguri
Date:     2012-12-24 03:13:53 +0000 (Mon, 24 Dec 2012)
Log Message:
-----------
BGE: "Fix" for issue [#33663] "Objects Share Materials / Textures When Grouped In SingleTexture / MultiTexture Mode" reported by Josiah Lane (solarlune).

This commit adds a UI option in the Render properties to enable the new material caching in the converter. This caching can cause problems with Singletexture and Multitexture materials when texface is being used to handle materials. By default this option is enabled and users with broken games have two options:

  1) Fix up their materials so they are properly using textures
  2) Disable the material caching and take a speed hit during conversion time

Regardless of the setting, caching is always enabled for GLSL materials.

Modified Paths:
--------------
    trunk/blender/release/scripts/startup/bl_ui/properties_game.py
    trunk/blender/source/blender/makesdna/DNA_scene_types.h
    trunk/blender/source/blender/makesrna/intern/rna_scene.c
    trunk/blender/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
    trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp
    trunk/blender/source/gameengine/Converter/KX_BlenderSceneConverter.cpp
    trunk/blender/source/gameengine/Converter/KX_BlenderSceneConverter.h
    trunk/blender/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
    trunk/blender/source/gameengine/Ketsji/KX_ISceneConverter.h

Modified: trunk/blender/release/scripts/startup/bl_ui/properties_game.py
===================================================================
--- trunk/blender/release/scripts/startup/bl_ui/properties_game.py	2012-12-24 02:59:16 UTC (rev 53305)
+++ trunk/blender/release/scripts/startup/bl_ui/properties_game.py	2012-12-24 03:13:53 UTC (rev 53306)
@@ -407,6 +407,7 @@
         col = row.column()
         col.prop(gs, "use_frame_rate")
         col.prop(gs, "restrict_animation_updates")
+        col.prop(gs, "use_material_caching")
         col = row.column()
         col.prop(gs, "use_display_lists")
         col.active = gs.raster_storage != 'VERTEX_BUFFER_OBJECT'

Modified: trunk/blender/source/blender/makesdna/DNA_scene_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_scene_types.h	2012-12-24 02:59:16 UTC (rev 53305)
+++ trunk/blender/source/blender/makesdna/DNA_scene_types.h	2012-12-24 03:13:53 UTC (rev 53306)
@@ -693,6 +693,7 @@
 #define GAME_SHOW_MOUSE						(1 << 14)
 #define GAME_GLSL_NO_COLOR_MANAGEMENT		(1 << 15)
 #define GAME_SHOW_OBSTACLE_SIMULATION		(1 << 16)
+#define GAME_NO_MATERIAL_CACHING			(1 << 17)
 /* Note: GameData.flag is now an int (max 32 flags). A short could only take 16 flags */
 
 /* GameData.playerflag */

Modified: trunk/blender/source/blender/makesrna/intern/rna_scene.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_scene.c	2012-12-24 02:59:16 UTC (rev 53305)
+++ trunk/blender/source/blender/makesrna/intern/rna_scene.c	2012-12-24 03:13:53 UTC (rev 53306)
@@ -2776,6 +2776,11 @@
 	                         "Use extra textures like normal or specular maps for GLSL rendering");
 	RNA_def_property_update(prop, NC_SCENE | NA_EDITED, "rna_Scene_glsl_update");
 
+	prop = RNA_def_property(srna, "use_material_caching", PROP_BOOLEAN, PROP_NONE);
+	RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", GAME_NO_MATERIAL_CACHING);
+	RNA_def_property_ui_text(prop, "Use Material Caching",
+							 "Cache materials in the converter. This is faster, but can cause propblems with older Singletexture and Multitexture games");
+
 	/* obstacle simulation */
 	prop = RNA_def_property(srna, "obstacle_simulation", PROP_ENUM, PROP_NONE);
 	RNA_def_property_enum_sdna(prop, NULL, "obstacleSimulation");

Modified: trunk/blender/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
===================================================================
--- trunk/blender/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp	2012-12-24 02:59:16 UTC (rev 53305)
+++ trunk/blender/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp	2012-12-24 03:13:53 UTC (rev 53306)
@@ -468,6 +468,8 @@
 				sceneconverter->SetMaterials(true);
 			if (useglslmat && (gs.matmode == GAME_MAT_GLSL))
 				sceneconverter->SetGLSLMaterials(true);
+			if (scene->gm.flag & GAME_NO_MATERIAL_CACHING)
+				sceneconverter->SetCacheMaterials(false);
 					
 			KX_Scene* startscene = new KX_Scene(keyboarddevice,
 				mousedevice,

Modified: trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp
===================================================================
--- trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp	2012-12-24 02:59:16 UTC (rev 53305)
+++ trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp	2012-12-24 03:13:53 UTC (rev 53306)
@@ -922,6 +922,9 @@
 		/* do Texture Face materials */
 		Image* bima = (tface)? (Image*)tface->tpage: NULL;
 		STR_String imastr =  (tface)? (bima? (bima)->id.name : "" ) : "";
+
+		if (!converter->GetCacheMaterials())
+			polymat = NULL;
 		
 		char alpha_blend=0;
 		short tile=0;
@@ -1044,7 +1047,8 @@
 				polymat->m_shininess = 35.0;
 			}
 			
-			converter->CachePolyMaterial(ma, polymat);
+			if (converter->GetCacheMaterials())
+				converter->CachePolyMaterial(ma, polymat);
 		}
 	}
 	

Modified: trunk/blender/source/gameengine/Converter/KX_BlenderSceneConverter.cpp
===================================================================
--- trunk/blender/source/gameengine/Converter/KX_BlenderSceneConverter.cpp	2012-12-24 02:59:16 UTC (rev 53305)
+++ trunk/blender/source/gameengine/Converter/KX_BlenderSceneConverter.cpp	2012-12-24 03:13:53 UTC (rev 53306)
@@ -131,7 +131,8 @@
 							m_ketsjiEngine(engine),
 							m_alwaysUseExpandFraming(false),
 							m_usemat(false),
-							m_useglslmat(false)
+							m_useglslmat(false),
+							m_use_mat_cache(true)
 {
 	tag_main(maggie, 0); /* avoid re-tagging later on */
 	m_newfilename = "";
@@ -488,6 +489,11 @@
 	m_useglslmat = val;
 }
 
+void KX_BlenderSceneConverter::SetCacheMaterials(bool val)
+{
+	m_use_mat_cache = val;
+}
+
 bool KX_BlenderSceneConverter::GetMaterials()
 {
 	return m_usemat;
@@ -498,6 +504,11 @@
 	return m_useglslmat;
 }
 
+bool KX_BlenderSceneConverter::GetCacheMaterials()
+{
+	return m_use_mat_cache;
+}
+
 void KX_BlenderSceneConverter::RegisterBlenderMaterial(BL_Material *mat)
 {
 	// First make sure we don't register the material twice

Modified: trunk/blender/source/gameengine/Converter/KX_BlenderSceneConverter.h
===================================================================
--- trunk/blender/source/gameengine/Converter/KX_BlenderSceneConverter.h	2012-12-24 02:59:16 UTC (rev 53305)
+++ trunk/blender/source/gameengine/Converter/KX_BlenderSceneConverter.h	2012-12-24 03:13:53 UTC (rev 53306)
@@ -91,6 +91,7 @@
 	bool					m_alwaysUseExpandFraming;
 	bool					m_usemat;
 	bool					m_useglslmat;
+	bool					m_use_mat_cache;
 
 public:
 	KX_BlenderSceneConverter(
@@ -160,6 +161,10 @@
 	virtual void SetGLSLMaterials(bool val);
 	virtual bool GetGLSLMaterials();
 
+	// cache materials during conversion
+	virtual void SetCacheMaterials(bool val);
+	virtual bool GetCacheMaterials();
+
 	struct Scene* GetBlenderSceneForName(const STR_String& name);
 
 //	struct Main* GetMain() { return m_maggie; }

Modified: trunk/blender/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
===================================================================
--- trunk/blender/source/gameengine/GamePlayer/ghost/GPG_Application.cpp	2012-12-24 02:59:16 UTC (rev 53305)
+++ trunk/blender/source/gameengine/GamePlayer/ghost/GPG_Application.cpp	2012-12-24 03:13:53 UTC (rev 53306)
@@ -703,6 +703,8 @@
 			m_sceneconverter->SetMaterials(true);
 		if (m_blenderglslmat && (m_globalSettings->matmode == GAME_MAT_GLSL))
 			m_sceneconverter->SetGLSLMaterials(true);
+		if (m_startScene->gm.flag & GAME_NO_MATERIAL_CACHING)
+			m_sceneconverter->SetCacheMaterials(false);
 
 		KX_Scene* startscene = new KX_Scene(m_keyboard,
 			m_mouse,

Modified: trunk/blender/source/gameengine/Ketsji/KX_ISceneConverter.h
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_ISceneConverter.h	2012-12-24 02:59:16 UTC (rev 53305)
+++ trunk/blender/source/gameengine/Ketsji/KX_ISceneConverter.h	2012-12-24 03:13:53 UTC (rev 53306)
@@ -89,6 +89,10 @@
 	virtual void SetGLSLMaterials(bool val) =0;
 	virtual bool GetGLSLMaterials()=0;
 
+	// cache materials during conversion
+	virtual void SetCacheMaterials(bool val) =0;
+	virtual bool GetCacheMaterials()=0;
+
 	virtual struct Scene* GetBlenderSceneForName(const STR_String& name)=0;
 	
 	




More information about the Bf-blender-cvs mailing list