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);
}
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs