Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMitchell Stokes <mogurijin@gmail.com>2013-07-16 02:35:09 +0400
committerMitchell Stokes <mogurijin@gmail.com>2013-07-16 02:35:09 +0400
commitefc4b08094e520afd6598a13c8b586df4abcc45a (patch)
treee8e9a00380249b6a5919bcfcc158186f344277ca /source/gameengine/Converter/KX_BlenderSceneConverter.h
parent19dee5e413453cc4a2a98c17aaf39f00e04f7619 (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.h16
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);