[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [14629] trunk/blender/source/gameengine: fix BGE bug #8869: Added objects are not lit correctly

Benoit Bolsee benoit.bolsee at online.be
Wed Apr 30 21:58:45 CEST 2008


Revision: 14629
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=14629
Author:   ben2610
Date:     2008-04-30 21:58:44 +0200 (Wed, 30 Apr 2008)

Log Message:
-----------
fix BGE bug #8869: Added objects are not lit correctly

The current layer information is now stored in KX_GameObject and inherited from the parent object when dynamically added. This information is used during the rendering the select the lamps. As the selected lamps are always coming from active layers, their position and orientation are correct. 

Modified Paths:
--------------
    trunk/blender/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp
    trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp
    trunk/blender/source/gameengine/GamePlayer/common/GPC_RenderTools.cpp
    trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp
    trunk/blender/source/gameengine/Ketsji/KX_GameObject.h
    trunk/blender/source/gameengine/Ketsji/KX_Scene.cpp
    trunk/blender/source/gameengine/Rasterizer/RAS_IRenderTools.h
    trunk/blender/source/gameengine/Rasterizer/RAS_MaterialBucket.cpp

Modified: trunk/blender/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp
===================================================================
--- trunk/blender/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp	2008-04-30 18:30:11 UTC (rev 14628)
+++ trunk/blender/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp	2008-04-30 19:58:44 UTC (rev 14629)
@@ -91,6 +91,10 @@
 	{
 		if (m_clientobject)
 		{
+			if (layer == RAS_LIGHT_OBJECT_LAYER)
+			{
+				layer = static_cast<KX_GameObject*>(m_clientobject)->GetLayer();
+			}
 			if (applyLights(layer))
 			{
 				EnableOpenGLLights();

Modified: trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp
===================================================================
--- trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp	2008-04-30 18:30:11 UTC (rev 14628)
+++ trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp	2008-04-30 19:58:44 UTC (rev 14629)
@@ -1680,8 +1680,11 @@
 		break;
 	}
 	}
-	if (gameobj)
+	if (gameobj) 
+	{
 		gameobj->SetPhysicsEnvironment(kxscene->GetPhysicsEnvironment());
+		gameobj->SetLayer(ob->lay);
+	}
 	return gameobj;
 }
 

Modified: trunk/blender/source/gameengine/GamePlayer/common/GPC_RenderTools.cpp
===================================================================
--- trunk/blender/source/gameengine/GamePlayer/common/GPC_RenderTools.cpp	2008-04-30 18:30:11 UTC (rev 14628)
+++ trunk/blender/source/gameengine/GamePlayer/common/GPC_RenderTools.cpp	2008-04-30 19:58:44 UTC (rev 14629)
@@ -137,6 +137,10 @@
 	{
 		if (m_clientobject)
 		{	
+			if (layer == RAS_LIGHT_OBJECT_LAYER)
+			{
+				layer = static_cast<KX_GameObject*>(m_clientobject)->GetLayer();
+			}
 			if (applyLights(layer))
 			{
 				EnableOpenGLLights();

Modified: trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp	2008-04-30 18:30:11 UTC (rev 14628)
+++ trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp	2008-04-30 19:58:44 UTC (rev 14629)
@@ -74,6 +74,7 @@
 ) : 
 	SCA_IObject(T),
 	m_bDyna(false),
+	m_layer(0),
 	m_bSuspendDynamics(false),
 	m_bUseObjectColor(false),
 	m_bVisible(true),
@@ -479,6 +480,22 @@
 	m_bVisible = v;
 }
 
+void
+KX_GameObject::SetLayer(
+	int l
+	)
+{
+	m_layer = l;
+}
+
+int
+KX_GameObject::GetLayer(
+	void
+	)
+{
+	return m_layer;
+}
+
 // used by Python, and the actuatorshould _not_ be misused by the
 // scene!
 void 

Modified: trunk/blender/source/gameengine/Ketsji/KX_GameObject.h
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_GameObject.h	2008-04-30 18:30:11 UTC (rev 14628)
+++ trunk/blender/source/gameengine/Ketsji/KX_GameObject.h	2008-04-30 19:58:44 UTC (rev 14629)
@@ -70,6 +70,7 @@
 	KX_ClientObjectInfo*				m_pClient_info;
 	STR_String							m_name;
 	STR_String							m_text;
+	int									m_layer;
 	std::vector<RAS_MeshObject*>		m_meshes;
 	
 	bool								m_bSuspendDynamics;
@@ -571,6 +572,22 @@
 		bool b
 	);
 
+	/**
+	 * Change the layer of the object (when it is added in another layer
+	 * than the original layer)
+	 */
+		void
+	SetLayer(
+		int l
+	);
+
+	/**
+	 * Get the object layer
+	 */
+		int
+	GetLayer(
+		void
+	);
 		
 	/**
 	 * @section Logic bubbling methods.

Modified: trunk/blender/source/gameengine/Ketsji/KX_Scene.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_Scene.cpp	2008-04-30 18:30:11 UTC (rev 14628)
+++ trunk/blender/source/gameengine/Ketsji/KX_Scene.cpp	2008-04-30 19:58:44 UTC (rev 14629)
@@ -650,6 +650,8 @@
 	for (git = m_logicHierarchicalGameObjects.begin();!(git==m_logicHierarchicalGameObjects.end());++git)
 	{
 		(*git)->Relink(&m_map_gameobject_to_replica);
+		// add the object in the layer of the parent
+		(*git)->SetLayer(parentobj->GetLayer());
 	}
 
 	// now replicate logic

Modified: trunk/blender/source/gameengine/Rasterizer/RAS_IRenderTools.h
===================================================================
--- trunk/blender/source/gameengine/Rasterizer/RAS_IRenderTools.h	2008-04-30 18:30:11 UTC (rev 14628)
+++ trunk/blender/source/gameengine/Rasterizer/RAS_IRenderTools.h	2008-04-30 19:58:44 UTC (rev 14629)
@@ -61,6 +61,10 @@
 		RAS_TEXT_PADDED,
 		RAS_TEXT_MAX
 	};
+	enum RAS_LIGHT_MODE {
+		RAS_LIGHT_NONE = -1,
+		RAS_LIGHT_OBJECT_LAYER = 0
+	};
 
 	RAS_IRenderTools(
 	) :

Modified: trunk/blender/source/gameengine/Rasterizer/RAS_MaterialBucket.cpp
===================================================================
--- trunk/blender/source/gameengine/Rasterizer/RAS_MaterialBucket.cpp	2008-04-30 18:30:11 UTC (rev 14628)
+++ trunk/blender/source/gameengine/Rasterizer/RAS_MaterialBucket.cpp	2008-04-30 19:58:44 UTC (rev 14629)
@@ -189,7 +189,7 @@
 	}
 	else
 	{
-		rendertools->ProcessLighting(m_material->GetLightLayer());
+		rendertools->ProcessLighting(RAS_IRenderTools::RAS_LIGHT_OBJECT_LAYER/*m_material->GetLightLayer()*/);
 	}
 
 	drawmode = (rasty->GetDrawingMode()  < RAS_IRasterizer::KX_SOLID ? 	
@@ -204,7 +204,6 @@
 	if (!ms.m_bVisible)
 		return;
 	
-	rendertools->SetClientObject(ms.m_clientObj);
 	m_material->ActivateMeshSlot(ms, rasty);
 
 	/* __NLA Do the deformation */
@@ -317,15 +316,12 @@
 
 	//rasty->SetMaterial(*m_material);
 	
-	if (m_meshSlots.size() >0)
-	{
-		rendertools->SetClientObject((*m_meshSlots.begin()).m_clientObj);
-	}
 	
 	int drawmode;
 	for (T_MeshSlotList::const_iterator it = m_meshSlots.begin();
 	! (it == m_meshSlots.end()); ++it)
 	{
+		rendertools->SetClientObject((*it).m_clientObj);
 		while (ActivateMaterial(cameratrans, rasty, rendertools, drawmode))
 			RenderMeshSlot(cameratrans, rasty, rendertools, *it, drawmode);
 	}





More information about the Bf-blender-cvs mailing list