diff options
author | Mitchell Stokes <mogurijin@gmail.com> | 2012-12-24 07:13:53 +0400 |
---|---|---|
committer | Mitchell Stokes <mogurijin@gmail.com> | 2012-12-24 07:13:53 +0400 |
commit | a1c9241797b003979c1da747e217e875c497c775 (patch) | |
tree | f5be743fa99e6ea7236e848b0f1d04f5c5d5772a /source/gameengine/Converter | |
parent | 119665d5b7b61f1924b4f0bf89fe1cff00017eed (diff) |
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.
Diffstat (limited to 'source/gameengine/Converter')
3 files changed, 22 insertions, 2 deletions
diff --git a/source/gameengine/Converter/BL_BlenderDataConversion.cpp b/source/gameengine/Converter/BL_BlenderDataConversion.cpp index 874bf614413..d0d6f9cb81c 100644 --- a/source/gameengine/Converter/BL_BlenderDataConversion.cpp +++ b/source/gameengine/Converter/BL_BlenderDataConversion.cpp @@ -922,6 +922,9 @@ static RAS_MaterialBucket *material_from_mesh(Material *ma, MFace *mface, MTFace /* 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 @@ static RAS_MaterialBucket *material_from_mesh(Material *ma, MFace *mface, MTFace polymat->m_shininess = 35.0; } - converter->CachePolyMaterial(ma, polymat); + if (converter->GetCacheMaterials()) + converter->CachePolyMaterial(ma, polymat); } } diff --git a/source/gameengine/Converter/KX_BlenderSceneConverter.cpp b/source/gameengine/Converter/KX_BlenderSceneConverter.cpp index ceaa0a5f5a8..5524612f707 100644 --- a/source/gameengine/Converter/KX_BlenderSceneConverter.cpp +++ b/source/gameengine/Converter/KX_BlenderSceneConverter.cpp @@ -131,7 +131,8 @@ KX_BlenderSceneConverter::KX_BlenderSceneConverter( 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 @@ void KX_BlenderSceneConverter::SetGLSLMaterials(bool val) 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 @@ bool KX_BlenderSceneConverter::GetGLSLMaterials() 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 diff --git a/source/gameengine/Converter/KX_BlenderSceneConverter.h b/source/gameengine/Converter/KX_BlenderSceneConverter.h index f7723350eee..06dac1707c5 100644 --- a/source/gameengine/Converter/KX_BlenderSceneConverter.h +++ b/source/gameengine/Converter/KX_BlenderSceneConverter.h @@ -91,6 +91,7 @@ class KX_BlenderSceneConverter : public KX_ISceneConverter bool m_alwaysUseExpandFraming; bool m_usemat; bool m_useglslmat; + bool m_use_mat_cache; public: KX_BlenderSceneConverter( @@ -160,6 +161,10 @@ public: 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; } |