diff options
author | Mitchell Stokes <mogurijin@gmail.com> | 2013-07-16 02:35:09 +0400 |
---|---|---|
committer | Mitchell Stokes <mogurijin@gmail.com> | 2013-07-16 02:35:09 +0400 |
commit | efc4b08094e520afd6598a13c8b586df4abcc45a (patch) | |
tree | e8e9a00380249b6a5919bcfcc158186f344277ca /source/gameengine/Converter/KX_BlenderSceneConverter.h | |
parent | 19dee5e413453cc4a2a98c17aaf39f00e04f7619 (diff) |
BGE: Fix for [#36023] "Objects of added scene are lit by lights of current scene" reported by Raf Colson (raco).
The material caching now keeps a cache per scene. Before materials from different scenes were sharing the same cache.
Diffstat (limited to 'source/gameengine/Converter/KX_BlenderSceneConverter.h')
-rw-r--r-- | source/gameengine/Converter/KX_BlenderSceneConverter.h | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/source/gameengine/Converter/KX_BlenderSceneConverter.h b/source/gameengine/Converter/KX_BlenderSceneConverter.h index 06dac1707c5..7ed75ad7614 100644 --- a/source/gameengine/Converter/KX_BlenderSceneConverter.h +++ b/source/gameengine/Converter/KX_BlenderSceneConverter.h @@ -53,6 +53,10 @@ class BL_Material; struct Main; struct Scene; struct ThreadInfo; +struct Material; + +typedef map<KX_Scene*, map<Material*, BL_Material*> > MaterialCache; +typedef map<KX_Scene*, map<Material*, RAS_IPolyMaterial*> > PolyMaterialCache; class KX_BlenderSceneConverter : public KX_ISceneConverter { @@ -66,8 +70,8 @@ class KX_BlenderSceneConverter : public KX_ISceneConverter ThreadInfo *m_threadinfo; // Cached material conversions - map<struct Material*, BL_Material*> m_mat_cache; - map<struct Material*, RAS_IPolyMaterial*> m_polymat_cache; + MaterialCache m_mat_cache; + PolyMaterialCache m_polymat_cache; // Saved KX_LibLoadStatus objects map<char *, class KX_LibLoadStatus*> m_status_map; @@ -126,12 +130,12 @@ public: RAS_MeshObject *FindGameMesh(struct Mesh *for_blendermesh/*, unsigned int onlayer*/); void RegisterPolyMaterial(RAS_IPolyMaterial *polymat); - void CachePolyMaterial(struct Material *mat, RAS_IPolyMaterial *polymat); - RAS_IPolyMaterial *FindCachedPolyMaterial(struct Material *mat); + void CachePolyMaterial(KX_Scene *scene, Material *mat, RAS_IPolyMaterial *polymat); + RAS_IPolyMaterial *FindCachedPolyMaterial(KX_Scene *scene, Material *mat); void RegisterBlenderMaterial(BL_Material *mat); - void CacheBlenderMaterial(struct Material *mat, BL_Material *blmat); - BL_Material *FindCachedBlenderMaterial(struct Material *mat); + void CacheBlenderMaterial(KX_Scene *scene, Material *mat, BL_Material *blmat); + BL_Material *FindCachedBlenderMaterial(KX_Scene *scene, Material *mat); void RegisterInterpolatorList(BL_InterpolatorList *actList, struct bAction *for_act); BL_InterpolatorList *FindInterpolatorList(struct bAction *for_act); |