[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [57982] branches/soc-2013-bge/source: Cleaning up the game engine level of detail logic to avoid crashes with levels that have no source object defined .
Daniel Stokes
kupomail at gmail.com
Thu Jul 4 04:40:00 CEST 2013
Revision: 57982
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=57982
Author: kupoman
Date: 2013-07-04 02:39:58 +0000 (Thu, 04 Jul 2013)
Log Message:
-----------
Cleaning up the game engine level of detail logic to avoid crashes with levels that have no source object defined.
Modified Paths:
--------------
branches/soc-2013-bge/source/blender/blenkernel/intern/object.c
branches/soc-2013-bge/source/blender/makesdna/DNA_object_types.h
branches/soc-2013-bge/source/gameengine/Converter/BL_BlenderDataConversion.cpp
branches/soc-2013-bge/source/gameengine/Ketsji/KX_GameObject.cpp
Modified: branches/soc-2013-bge/source/blender/blenkernel/intern/object.c
===================================================================
--- branches/soc-2013-bge/source/blender/blenkernel/intern/object.c 2013-07-03 23:46:56 UTC (rev 57981)
+++ branches/soc-2013-bge/source/blender/blenkernel/intern/object.c 2013-07-04 02:39:58 UTC (rev 57982)
@@ -1014,7 +1014,6 @@
LodLevel* new_level = lod_level_select(ob, camera_position);
if (new_level != cur_level) {
- printf("Level Switch!\n");
ob->currentlod = new_level;
return true;
}
Modified: branches/soc-2013-bge/source/blender/makesdna/DNA_object_types.h
===================================================================
--- branches/soc-2013-bge/source/blender/makesdna/DNA_object_types.h 2013-07-03 23:46:56 UTC (rev 57981)
+++ branches/soc-2013-bge/source/blender/makesdna/DNA_object_types.h 2013-07-04 02:39:58 UTC (rev 57982)
@@ -105,8 +105,7 @@
typedef struct LodLevel {
struct LodLevel *next, *prev;
struct Object *source;
- char level; /* for BGE usage to handle lookups */
- char use_mesh, use_mat, use_logic;
+ char use_mesh, use_mat, use_logic, pad;
float distance;
} LodLevel;
Modified: branches/soc-2013-bge/source/gameengine/Converter/BL_BlenderDataConversion.cpp
===================================================================
--- branches/soc-2013-bge/source/gameengine/Converter/BL_BlenderDataConversion.cpp 2013-07-03 23:46:56 UTC (rev 57981)
+++ branches/soc-2013-bge/source/gameengine/Converter/BL_BlenderDataConversion.cpp 2013-07-04 02:39:58 UTC (rev 57982)
@@ -2000,8 +2000,8 @@
Mesh* lodmesh = mesh;
Object* lodmatob = ob;
gameobj->AddLodMesh(meshobj);
- for (int i = 1; lod; lod = lod->next, i++) {
- lod->level = i;
+ for (; lod; lod = lod->next) {
+ if (!lod->source) continue;
if (lod->use_mesh) {
lodmesh = static_cast<Mesh*>(lod->source->data);
}
Modified: branches/soc-2013-bge/source/gameengine/Ketsji/KX_GameObject.cpp
===================================================================
--- branches/soc-2013-bge/source/gameengine/Ketsji/KX_GameObject.cpp 2013-07-03 23:46:56 UTC (rev 57981)
+++ branches/soc-2013-bge/source/gameengine/Ketsji/KX_GameObject.cpp 2013-07-04 02:39:58 UTC (rev 57982)
@@ -732,13 +732,15 @@
MT_Vector3 delta = this->NodeGetWorldPosition() - cam_pos;
float distance2 = delta.dot(delta);
+ int level = 0;
Object *bob = this->GetBlenderObject();
LodLevel *lod = (LodLevel*) bob->lodlevels.first;
- for (int i = 0; lod; lod = lod->next, i++) {
+ for (; lod; lod = lod->next, level++) {
+ if (!lod->source) level--;
if (!lod->next || lod->next->distance * lod->next->distance > distance2) break;
}
- RAS_MeshObject *mesh = this->m_lodmeshes[lod->level];
+ RAS_MeshObject *mesh = this->m_lodmeshes[level];
if (mesh != this->m_meshes[0]) {
this->GetScene()->ReplaceMesh(this, mesh, true, false);
More information about the Bf-blender-cvs
mailing list