[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [49073] branches/soc-2012-swiss_cheese/ source/gameengine: When libloading, don' t attempt to compile shaders until during the scene merge.
Mitchell Stokes
mogurijin at gmail.com
Fri Jul 20 08:34:31 CEST 2012
Revision: 49073
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=49073
Author: moguri
Date: 2012-07-20 06:34:31 +0000 (Fri, 20 Jul 2012)
Log Message:
-----------
When libloading, don't attempt to compile shaders until during the scene merge. This prevents the shaders from getting compiled twice (giving a speedup), and it solves the problem of trying to load shaders in a separate thread, which resulted in an error.
Modified Paths:
--------------
branches/soc-2012-swiss_cheese/source/gameengine/Converter/BL_BlenderDataConversion.cpp
branches/soc-2012-swiss_cheese/source/gameengine/Converter/BL_BlenderDataConversion.h
branches/soc-2012-swiss_cheese/source/gameengine/Converter/KX_BlenderSceneConverter.cpp
branches/soc-2012-swiss_cheese/source/gameengine/Converter/KX_BlenderSceneConverter.h
branches/soc-2012-swiss_cheese/source/gameengine/Converter/KX_ConvertActuators.cpp
branches/soc-2012-swiss_cheese/source/gameengine/Ketsji/KX_BlenderMaterial.cpp
branches/soc-2012-swiss_cheese/source/gameengine/Ketsji/KX_BlenderMaterial.h
branches/soc-2012-swiss_cheese/source/gameengine/Ketsji/KX_ISceneConverter.h
branches/soc-2012-swiss_cheese/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
branches/soc-2012-swiss_cheese/source/gameengine/Ketsji/KX_KetsjiEngine.h
branches/soc-2012-swiss_cheese/source/gameengine/Rasterizer/RAS_IPolygonMaterial.h
Modified: branches/soc-2012-swiss_cheese/source/gameengine/Converter/BL_BlenderDataConversion.cpp
===================================================================
--- branches/soc-2012-swiss_cheese/source/gameengine/Converter/BL_BlenderDataConversion.cpp 2012-07-19 21:55:16 UTC (rev 49072)
+++ branches/soc-2012-swiss_cheese/source/gameengine/Converter/BL_BlenderDataConversion.cpp 2012-07-20 06:34:31 UTC (rev 49073)
@@ -917,7 +917,7 @@
{
kx_blmat = new KX_BlenderMaterial();
- kx_blmat->Initialize(scene, bl_mat, (ma?&ma->game:NULL));
+ kx_blmat->Initialize(scene, bl_mat, (ma?&ma->game:NULL), lightlayer);
polymat = static_cast<RAS_IPolyMaterial*>(kx_blmat);
converter->CachePolyMaterial(ma, polymat);
}
@@ -1067,7 +1067,7 @@
}
/* blenderobj can be NULL, make sure its checked for */
-RAS_MeshObject* BL_ConvertMesh(Mesh* mesh, Object* blenderobj, KX_Scene* scene, KX_BlenderSceneConverter *converter)
+RAS_MeshObject* BL_ConvertMesh(Mesh* mesh, Object* blenderobj, KX_Scene* scene, KX_BlenderSceneConverter *converter, bool libloading)
{
RAS_MeshObject *meshobj;
int lightlayer = blenderobj ? blenderobj->lay:(1<<20)-1; // all layers if no object.
@@ -1265,9 +1265,12 @@
meshobj->EndConversion();
// pre calculate texture generation
- for (list<RAS_MeshMaterial>::iterator mit = meshobj->GetFirstMaterial();
- mit != meshobj->GetLastMaterial(); ++ mit) {
- mit->m_bucket->GetPolyMaterial()->OnConstruction(lightlayer);
+ // However, we want to delay this if we're libloading so we can make sure we have the right scene.
+ if (!libloading) {
+ for (list<RAS_MeshMaterial>::iterator mit = meshobj->GetFirstMaterial();
+ mit != meshobj->GetLastMaterial(); ++ mit) {
+ mit->m_bucket->GetPolyMaterial()->OnConstruction();
+ }
}
if (layers)
@@ -1431,7 +1434,7 @@
if (kx_blmat == NULL)
kx_blmat = new KX_BlenderMaterial();
- kx_blmat->Initialize(scene, bl_mat, (ma?&ma->game:NULL));
+ kx_blmat->Initialize(scene, bl_mat, (ma?&ma->game:NULL), lightlayer);
polymat = static_cast<RAS_IPolyMaterial*>(kx_blmat);
}
else {
@@ -1660,7 +1663,7 @@
// pre calculate texture generation
for (list<RAS_MeshMaterial>::iterator mit = meshobj->GetFirstMaterial();
mit != meshobj->GetLastMaterial(); ++ mit) {
- mit->m_bucket->GetPolyMaterial()->OnConstruction(lightlayer);
+ mit->m_bucket->GetPolyMaterial()->OnConstruction();
}
if (layers)
@@ -2327,7 +2330,8 @@
Object *ob,
KX_Scene *kxscene,
RAS_IRenderTools *rendertools,
- KX_BlenderSceneConverter *converter)
+ KX_BlenderSceneConverter *converter,
+ bool libloading)
{
KX_GameObject *gameobj = NULL;
Scene *blenderscene = kxscene->GetBlenderScene();
@@ -2365,7 +2369,7 @@
Mesh* mesh = static_cast<Mesh*>(ob->data);
float center[3], extents[3];
float radius = my_boundbox_mesh((Mesh*) ob->data, center, extents);
- RAS_MeshObject* meshobj = BL_ConvertMesh(mesh,ob,kxscene,converter);
+ RAS_MeshObject* meshobj = BL_ConvertMesh(mesh,ob,kxscene,converter, libloading);
// needed for python scripting
kxscene->GetLogicManager()->RegisterMeshName(meshobj->GetName(),meshobj);
@@ -2728,7 +2732,8 @@
RAS_IRenderTools* rendertools,
RAS_ICanvas* canvas,
KX_BlenderSceneConverter* converter,
- bool alwaysUseExpandFraming
+ bool alwaysUseExpandFraming,
+ bool libloading
)
{
@@ -2838,7 +2843,8 @@
base->object,
kxscene,
rendertools,
- converter);
+ converter,
+ libloading);
bool isInActiveLayer = (blenderobject->lay & activeLayerBitInfo) !=0;
bool addobj=true;
@@ -2897,7 +2903,8 @@
blenderobject,
kxscene,
rendertools,
- converter);
+ converter,
+ libloading);
// this code is copied from above except that
// object from groups are never in active layer
Modified: branches/soc-2012-swiss_cheese/source/gameengine/Converter/BL_BlenderDataConversion.h
===================================================================
--- branches/soc-2012-swiss_cheese/source/gameengine/Converter/BL_BlenderDataConversion.h 2012-07-19 21:55:16 UTC (rev 49072)
+++ branches/soc-2012-swiss_cheese/source/gameengine/Converter/BL_BlenderDataConversion.h 2012-07-20 06:34:31 UTC (rev 49073)
@@ -38,7 +38,7 @@
#include "KX_PhysicsEngineEnums.h"
#include "SCA_IInputDevice.h"
-class RAS_MeshObject* BL_ConvertMesh(struct Mesh* mesh,struct Object* lightobj,class KX_Scene* scene, class KX_BlenderSceneConverter *converter);
+class RAS_MeshObject* BL_ConvertMesh(struct Mesh* mesh,struct Object* lightobj,class KX_Scene* scene, class KX_BlenderSceneConverter *converter, bool libloading);
void BL_ConvertBlenderObjects(struct Main* maggie,
class KX_Scene* kxscene,
@@ -47,7 +47,8 @@
class RAS_IRenderTools* rendertools,
class RAS_ICanvas* canvas,
class KX_BlenderSceneConverter* sceneconverter,
- bool alwaysUseExpandFraming
+ bool alwaysUseExpandFraming,
+ bool libloading=false
);
SCA_IInputDevice::KX_EnumInputs ConvertKeyCode(int key_code);
Modified: branches/soc-2012-swiss_cheese/source/gameengine/Converter/KX_BlenderSceneConverter.cpp
===================================================================
--- branches/soc-2012-swiss_cheese/source/gameengine/Converter/KX_BlenderSceneConverter.cpp 2012-07-19 21:55:16 UTC (rev 49072)
+++ branches/soc-2012-swiss_cheese/source/gameengine/Converter/KX_BlenderSceneConverter.cpp 2012-07-20 06:34:31 UTC (rev 49073)
@@ -306,7 +306,8 @@
void KX_BlenderSceneConverter::ConvertScene(class KX_Scene* destinationscene,
class RAS_IRenderTools* rendertools,
- class RAS_ICanvas* canvas)
+ class RAS_ICanvas* canvas,
+ bool libloading)
{
//find out which physics engine
Scene *blenderscene = destinationscene->GetBlenderScene();
@@ -375,7 +376,8 @@
rendertools,
canvas,
this,
- m_alwaysUseExpandFraming
+ m_alwaysUseExpandFraming,
+ libloading
);
//These lookup are not needed during game
@@ -993,7 +995,7 @@
vector<KX_Scene*> *merge_scenes = new vector<KX_Scene*>(); // Deleted in MergeAsyncLoads
for (unsigned int i=0; i<scenes->size(); ++i) {
- new_scene = status->GetEngine()->CreateScene((*scenes)[i]);
+ new_scene = status->GetEngine()->CreateScene((*scenes)[i], true);
if (new_scene)
merge_scenes->push_back(new_scene);
@@ -1112,7 +1114,7 @@
for (mesh= (ID *)main_newlib->mesh.first; mesh; mesh= (ID *)mesh->next ) {
if (options & LIB_LOAD_VERBOSE)
printf("MeshName: %s\n", mesh->name+2);
- RAS_MeshObject *meshobj = BL_ConvertMesh((Mesh *)mesh, NULL, scene_merge, this);
+ RAS_MeshObject *meshobj = BL_ConvertMesh((Mesh *)mesh, NULL, scene_merge, this, false); // For now only use the libloading option for scenes, which need to handle materials/shaders
scene_merge->GetLogicManager()->RegisterMeshName(meshobj->GetName(),meshobj);
}
}
@@ -1140,7 +1142,7 @@
scenes->push_back((Scene*)scene);
} else {
/* merge into the base scene */
- KX_Scene* other= m_ketsjiEngine->CreateScene((Scene *)scene);
+ KX_Scene* other= m_ketsjiEngine->CreateScene((Scene *)scene, true);
scene_merge->MergeScene(other);
// RemoveScene(other); // Don't run this, it frees the entire scene converter data, just delete the scene
@@ -1577,7 +1579,7 @@
}
}
- RAS_MeshObject *meshobj = BL_ConvertMesh((Mesh *)me, NULL, kx_scene, this);
+ RAS_MeshObject *meshobj = BL_ConvertMesh((Mesh *)me, NULL, kx_scene, this, false);
kx_scene->GetLogicManager()->RegisterMeshName(meshobj->GetName(),meshobj);
m_map_mesh_to_gamemesh.clear(); /* This is at runtime so no need to keep this, BL_ConvertMesh adds */
return meshobj;
Modified: branches/soc-2012-swiss_cheese/source/gameengine/Converter/KX_BlenderSceneConverter.h
===================================================================
--- branches/soc-2012-swiss_cheese/source/gameengine/Converter/KX_BlenderSceneConverter.h 2012-07-19 21:55:16 UTC (rev 49072)
+++ branches/soc-2012-swiss_cheese/source/gameengine/Converter/KX_BlenderSceneConverter.h 2012-07-20 06:34:31 UTC (rev 49073)
@@ -104,7 +104,8 @@
virtual void ConvertScene(
class KX_Scene* destinationscene,
class RAS_IRenderTools* rendertools,
- class RAS_ICanvas* canvas
+ class RAS_ICanvas* canvas,
+ bool libloading=false
);
virtual void RemoveScene(class KX_Scene *scene);
Modified: branches/soc-2012-swiss_cheese/source/gameengine/Converter/KX_ConvertActuators.cpp
===================================================================
--- branches/soc-2012-swiss_cheese/source/gameengine/Converter/KX_ConvertActuators.cpp 2012-07-19 21:55:16 UTC (rev 49072)
+++ branches/soc-2012-swiss_cheese/source/gameengine/Converter/KX_ConvertActuators.cpp 2012-07-20 06:34:31 UTC (rev 49073)
@@ -523,7 +523,8 @@
editobact->me,
blenderobject,
scene,
- converter
+ converter,
+ false
);
KX_SCA_ReplaceMeshActuator* tmpreplaceact
Modified: branches/soc-2012-swiss_cheese/source/gameengine/Ketsji/KX_BlenderMaterial.cpp
===================================================================
--- branches/soc-2012-swiss_cheese/source/gameengine/Ketsji/KX_BlenderMaterial.cpp 2012-07-19 21:55:16 UTC (rev 49072)
+++ branches/soc-2012-swiss_cheese/source/gameengine/Ketsji/KX_BlenderMaterial.cpp 2012-07-20 06:34:31 UTC (rev 49073)
@@ -64,7 +64,8 @@
void KX_BlenderMaterial::Initialize(
KX_Scene *scene,
BL_Material *data,
- GameSettings *game)
+ GameSettings *game,
+ int lightlayer)
{
RAS_IPolyMaterial::Initialize(
data->texname[0],
@@ -88,6 +89,7 @@
mModified = 0;
mConstructed = false;
mPass = 0;
+ mLightLayer = lightlayer;
// --------------------------------
// RAS_IPolyMaterial variables...
m_flag |= RAS_BLENDERMAT;
@@ -179,14 +181,14 @@
}
}
-void KX_BlenderMaterial::OnConstruction(int layer)
+void KX_BlenderMaterial::OnConstruction()
{
if (mConstructed)
// when material are reused between objects
return;
if (mMaterial->glslmat)
- SetBlenderGLSLShader(layer);
+ SetBlenderGLSLShader();
InitTextures();
@@ -785,10 +787,19 @@
mMaterial->ref = (float)(ref);
}
-void KX_BlenderMaterial::SetBlenderGLSLShader(int layer)
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list