[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [29494] trunk/blender/source/gameengine: BGE: When dynamically loading scenes (bge.logic.LibLoad()) in GLSL mode, the lights in the loaded scene would not affect the current scene and vice versa .

Mitchell Stokes mogurijin at gmail.com
Wed Jun 16 21:07:20 CEST 2010


Revision: 29494
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=29494
Author:   moguri
Date:     2010-06-16 21:07:20 +0200 (Wed, 16 Jun 2010)

Log Message:
-----------
BGE: When dynamically loading scenes (bge.logic.LibLoad()) in GLSL mode, the lights in the loaded scene would not affect the current scene and vice versa. To fix this, I've updated to merge code to update the scenes that the shaders are using to the scene being merged into. 

Modified Paths:
--------------
    trunk/blender/source/gameengine/Ketsji/BL_BlenderShader.h
    trunk/blender/source/gameengine/Ketsji/KX_BlenderMaterial.h
    trunk/blender/source/gameengine/Ketsji/KX_Scene.cpp
    trunk/blender/source/gameengine/Rasterizer/RAS_BucketManager.cpp
    trunk/blender/source/gameengine/Rasterizer/RAS_BucketManager.h

Modified: trunk/blender/source/gameengine/Ketsji/BL_BlenderShader.h
===================================================================
--- trunk/blender/source/gameengine/Ketsji/BL_BlenderShader.h	2010-06-16 19:07:00 UTC (rev 29493)
+++ trunk/blender/source/gameengine/Ketsji/BL_BlenderShader.h	2010-06-16 19:07:20 UTC (rev 29494)
@@ -56,6 +56,13 @@
 	void ReloadMaterial();
 	int GetBlendMode();
 
+	void SetScene(KX_Scene *scene)
+	{
+		mScene = scene;
+		mBlenderScene = scene->GetBlenderScene();
+		ReloadMaterial();
+	}
+
 	bool Equals(BL_BlenderShader *blshader);
 	
 	

Modified: trunk/blender/source/gameengine/Ketsji/KX_BlenderMaterial.h
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_BlenderMaterial.h	2010-06-16 19:07:00 UTC (rev 29493)
+++ trunk/blender/source/gameengine/Ketsji/KX_BlenderMaterial.h	2010-06-16 19:07:20 UTC (rev 29494)
@@ -89,6 +89,7 @@
 	virtual void Replace_IScene(SCA_IScene *val)
 	{
 		mScene= static_cast<KX_Scene *>(val);
+		mBlenderShader->SetScene(mScene);
 	};
 
 #ifndef DISABLE_PYTHON

Modified: trunk/blender/source/gameengine/Ketsji/KX_Scene.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_Scene.cpp	2010-06-16 19:07:00 UTC (rev 29493)
+++ trunk/blender/source/gameengine/Ketsji/KX_Scene.cpp	2010-06-16 19:07:20 UTC (rev 29494)
@@ -1754,7 +1754,7 @@
 	}
 
 
-	GetBucketManager()->MergeBucketManager(other->GetBucketManager());
+	GetBucketManager()->MergeBucketManager(other->GetBucketManager(), this);
 
 	/* move materials across, assume they both use the same scene-converters */
 	GetSceneConverter()->MergeScene(this, other);

Modified: trunk/blender/source/gameengine/Rasterizer/RAS_BucketManager.cpp
===================================================================
--- trunk/blender/source/gameengine/Rasterizer/RAS_BucketManager.cpp	2010-06-16 19:07:00 UTC (rev 29493)
+++ trunk/blender/source/gameengine/Rasterizer/RAS_BucketManager.cpp	2010-06-16 19:07:20 UTC (rev 29494)
@@ -346,13 +346,21 @@
 
 //#include <stdio.h>
 
-void RAS_BucketManager::MergeBucketManager(RAS_BucketManager *other)
+void RAS_BucketManager::MergeBucketManager(RAS_BucketManager *other, SCA_IScene *scene)
 {
 	/* concatinate lists */
 	// printf("BEFORE %d %d\n", GetSolidBuckets().size(), GetAlphaBuckets().size());
+	BucketList::iterator it;
+
+	for (it = other->GetSolidBuckets().begin(); it != other->GetSolidBuckets().end(); ++it)
+		(*it)->GetPolyMaterial()->Replace_IScene(scene);
+
 	GetSolidBuckets().insert( GetSolidBuckets().end(), other->GetSolidBuckets().begin(), other->GetSolidBuckets().end() );
 	other->GetSolidBuckets().clear();
 
+	for (it = other->GetAlphaBuckets().begin(); it != other->GetAlphaBuckets().end(); ++it)
+		(*it)->GetPolyMaterial()->Replace_IScene(scene);
+
 	GetAlphaBuckets().insert( GetAlphaBuckets().end(), other->GetAlphaBuckets().begin(), other->GetAlphaBuckets().end() );
 	other->GetAlphaBuckets().clear();
 	//printf("AFTER %d %d\n", GetSolidBuckets().size(), GetAlphaBuckets().size());

Modified: trunk/blender/source/gameengine/Rasterizer/RAS_BucketManager.h
===================================================================
--- trunk/blender/source/gameengine/Rasterizer/RAS_BucketManager.h	2010-06-16 19:07:00 UTC (rev 29493)
+++ trunk/blender/source/gameengine/Rasterizer/RAS_BucketManager.h	2010-06-16 19:07:20 UTC (rev 29494)
@@ -63,7 +63,7 @@
 	void RemoveMaterial(RAS_IPolyMaterial * mat); // freeing scenes only
 
 	/* for merging */
-	void MergeBucketManager(RAS_BucketManager *other);
+	void MergeBucketManager(RAS_BucketManager *other, SCA_IScene *scene);
 	BucketList & GetSolidBuckets() {return m_SolidBuckets;};
 	BucketList & GetAlphaBuckets() {return m_AlphaBuckets;};
 





More information about the Bf-blender-cvs mailing list