[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [60127] branches/soc-2013-bge/source: Simplifying the usage of BKE_object_lod_meshob_get and BKE_object_lod_matob_get , and cleaning up the code lod code in object.c.
Daniel Stokes
kupomail at gmail.com
Sat Sep 14 02:32:58 CEST 2013
Revision: 60127
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=60127
Author: kupoman
Date: 2013-09-14 00:32:58 +0000 (Sat, 14 Sep 2013)
Log Message:
-----------
Simplifying the usage of BKE_object_lod_meshob_get and BKE_object_lod_matob_get, and cleaning up the code lod code in object.c.
The level of detail data now uses a bitfield for flags such as use_mesh and use_mat. The few files out there currently using levels of detail will need to renable those options.
Modified Paths:
--------------
branches/soc-2013-bge/source/blender/blenkernel/BKE_object.h
branches/soc-2013-bge/source/blender/blenkernel/intern/object.c
branches/soc-2013-bge/source/blender/editors/space_view3d/drawobject.c
branches/soc-2013-bge/source/blender/gpu/intern/gpu_draw.c
branches/soc-2013-bge/source/blender/makesdna/DNA_object_types.h
branches/soc-2013-bge/source/blender/makesrna/intern/rna_object.c
branches/soc-2013-bge/source/gameengine/Converter/BL_BlenderDataConversion.cpp
Modified: branches/soc-2013-bge/source/blender/blenkernel/BKE_object.h
===================================================================
--- branches/soc-2013-bge/source/blender/blenkernel/BKE_object.h 2013-09-14 00:30:56 UTC (rev 60126)
+++ branches/soc-2013-bge/source/blender/blenkernel/BKE_object.h 2013-09-14 00:32:58 UTC (rev 60127)
@@ -88,8 +88,8 @@
bool BKE_object_lod_remove(struct Object *ob, int level);
bool BKE_object_lod_update(struct Object *ob, float camera_position[3]);
bool BKE_object_lod_is_usable(struct Object *ob, struct Scene *scene);
-struct Object *BKE_object_lod_meshob_get(struct Object *ob);
-struct Object *BKE_object_lod_matob_get(struct Object *ob);
+struct Object *BKE_object_lod_meshob_get(struct Object *ob, struct Scene *scene);
+struct Object *BKE_object_lod_matob_get(struct Object *ob, struct Scene *scene);
struct Object *BKE_object_copy_ex(struct Main *bmain, struct Object *ob, int copy_caches);
struct Object *BKE_object_copy(struct Object *ob);
Modified: branches/soc-2013-bge/source/blender/blenkernel/intern/object.c
===================================================================
--- branches/soc-2013-bge/source/blender/blenkernel/intern/object.c 2013-09-14 00:30:56 UTC (rev 60126)
+++ branches/soc-2013-bge/source/blender/blenkernel/intern/object.c 2013-09-14 00:32:58 UTC (rev 60127)
@@ -988,7 +988,7 @@
return ob;
}
-void BKE_object_lod_add(struct Object *ob)
+void BKE_object_lod_add(Object *ob)
{
LodLevel *lod = MEM_callocN(sizeof(LodLevel), "LoD Level");
LodLevel *last = ob->lodlevels.last;
@@ -997,18 +997,18 @@
if (!last) {
LodLevel *base = MEM_callocN(sizeof(LodLevel), "Base LoD Level");
BLI_addtail(&ob->lodlevels, base);
- base->use_mat = base->use_mesh = 1;
+ base->flags = OB_LOD_USE_MESH | OB_LOD_USE_MAT;
base->source = ob;
last = ob->currentlod = base;
}
lod->distance = last->distance + 25.0f;
- lod->use_mesh = lod->use_mat = 1;
+ lod->flags = OB_LOD_USE_MESH | OB_LOD_USE_MAT;
BLI_addtail(&ob->lodlevels, lod);
}
-bool BKE_object_lod_remove(struct Object *ob, int level)
+bool BKE_object_lod_remove(Object *ob, int level)
{
LodLevel *rem;
@@ -1035,7 +1035,7 @@
return true;
}
-static LodLevel* lod_level_select(struct Object *ob, float cam_loc[3])
+static LodLevel* lod_level_select(Object *ob, float cam_loc[3])
{
LodLevel *current = ob->currentlod;
float ob_loc[3], delta[3];
@@ -1063,13 +1063,13 @@
return current;
}
-bool BKE_object_lod_is_usable(struct Object *ob, struct Scene *scene)
+bool BKE_object_lod_is_usable(Object *ob, Scene *scene)
{
bool active = (scene) ? ob == OBACT : 0;
return (ob->mode == OB_MODE_OBJECT || !active);
}
-bool BKE_object_lod_update(struct Object *ob, float camera_position[3])
+bool BKE_object_lod_update(Object *ob, float camera_position[3])
{
LodLevel* cur_level = ob->currentlod;
LodLevel* new_level = lod_level_select(ob, camera_position);
@@ -1082,32 +1082,28 @@
return false;
}
-struct Object *BKE_object_lod_meshob_get(struct Object *ob)
+static Object *lod_ob_get(Object *ob, Scene *scene, int flag)
{
LodLevel *current = ob->currentlod;
- if (!current)
+ if (!current || !BKE_object_lod_is_usable(ob, scene))
return ob;
- while( current->prev && (!current->use_mesh || !current->source || current->source->type != OB_MESH)) {
+ while( current->prev && (!(current->flags & flag) || !current->source || current->source->type != OB_MESH)) {
current = current->prev;
}
return current->source;
}
-struct Object *BKE_object_lod_matob_get(struct Object *ob)
+struct Object *BKE_object_lod_meshob_get(Object *ob, Scene *scene)
{
- LodLevel *current = ob->currentlod;
+ return lod_ob_get(ob, scene, OB_LOD_USE_MESH);
+}
- if (!current)
- return ob;
-
- while( current->prev && (!current->use_mat || !current->source || current->source->type != OB_MESH)) {
- current = current->prev;
- }
-
- return current->source;
+struct Object *BKE_object_lod_matob_get(Object *ob, Scene *scene)
+{
+ return lod_ob_get(ob, scene, OB_LOD_USE_MAT);
}
SoftBody *copy_softbody(SoftBody *sb, int copy_caches)
Modified: branches/soc-2013-bge/source/blender/editors/space_view3d/drawobject.c
===================================================================
--- branches/soc-2013-bge/source/blender/editors/space_view3d/drawobject.c 2013-09-14 00:30:56 UTC (rev 60126)
+++ branches/soc-2013-bge/source/blender/editors/space_view3d/drawobject.c 2013-09-14 00:32:58 UTC (rev 60127)
@@ -3358,7 +3358,7 @@
static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D *rv3d, Base *base,
const char dt, const unsigned char ob_wire_col[4], const short dflag)
{
- Object *ob = base->object;
+ Object *ob = BKE_object_lod_meshob_get(base->object, scene);
Mesh *me = ob->data;
Material *ma = give_current_material(ob, 1);
const short hasHaloMat = (ma && (ma->material_type == MA_TYPE_HALO) && !BKE_scene_use_new_shading_nodes(scene));
@@ -3368,14 +3368,6 @@
const bool is_obact = (ob == OBACT);
int draw_flags = (is_obact && paint_facesel_test(ob)) ? DRAW_FACE_SELECT : 0;
- if (BKE_object_lod_is_usable(ob, scene)) {
- ob = BKE_object_lod_meshob_get(ob);
- if (!ob) ob = base->object;
- me = ob->data;
- dm->release(dm);
- dm = mesh_get_derived_final(scene, ob, scene->customdata_mask);
- }
-
if (!dm)
return;
Modified: branches/soc-2013-bge/source/blender/gpu/intern/gpu_draw.c
===================================================================
--- branches/soc-2013-bge/source/blender/gpu/intern/gpu_draw.c 2013-09-14 00:30:56 UTC (rev 60126)
+++ branches/soc-2013-bge/source/blender/gpu/intern/gpu_draw.c 2013-09-14 00:32:58 UTC (rev 60127)
@@ -1389,10 +1389,7 @@
int new_shading_nodes = BKE_scene_use_new_shading_nodes(scene);
int use_matcap = (v3d->flag2 & V3D_SHOW_SOLID_MATCAP); /* assumes v3d->defmaterial->preview is set */
- if (BKE_object_lod_is_usable(ob, scene)) {
- Object *tmp = BKE_object_lod_matob_get(ob);
- if (tmp) ob = tmp;
- }
+ ob = BKE_object_lod_matob_get(ob, scene);
/* initialize state */
memset(&GMS, 0, sizeof(GMS));
Modified: branches/soc-2013-bge/source/blender/makesdna/DNA_object_types.h
===================================================================
--- branches/soc-2013-bge/source/blender/makesdna/DNA_object_types.h 2013-09-14 00:30:56 UTC (rev 60126)
+++ branches/soc-2013-bge/source/blender/makesdna/DNA_object_types.h 2013-09-14 00:32:58 UTC (rev 60127)
@@ -108,7 +108,7 @@
typedef struct LodLevel {
struct LodLevel *next, *prev;
struct Object *source;
- char use_mesh, use_mat, pad[2];
+ int flags;
float distance;
} LodLevel;
@@ -480,7 +480,13 @@
OB_BOUND_CAPSULE = 7,
};
+/* lod flags */
+enum {
+ OB_LOD_USE_MESH = 1 << 0,
+ OB_LOD_USE_MAT = 1 << 1,
+};
+
/* **************** BASE ********************* */
/* also needed for base!!!!! or rather, they interfere....*/
Modified: branches/soc-2013-bge/source/blender/makesrna/intern/rna_object.c
===================================================================
--- branches/soc-2013-bge/source/blender/makesrna/intern/rna_object.c 2013-09-14 00:30:56 UTC (rev 60126)
+++ branches/soc-2013-bge/source/blender/makesrna/intern/rna_object.c 2013-09-14 00:32:58 UTC (rev 60127)
@@ -2040,13 +2040,13 @@
RNA_def_property_update(prop, NC_LOD, NULL);
prop = RNA_def_property(srna, "use_mesh", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "use_mesh", 0);
+ RNA_def_property_boolean_sdna(prop, NULL, "flags", OB_LOD_USE_MESH);
RNA_def_property_ui_text(prop, "Use Mesh", "Use the mesh from this object at this level of detail");
RNA_def_property_ui_icon(prop, ICON_MESH_DATA, 0);
RNA_def_property_update(prop, NC_LOD, NULL);
prop = RNA_def_property(srna, "use_material", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "use_mat", 0);
+ RNA_def_property_boolean_sdna(prop, NULL, "flags", OB_LOD_USE_MAT);
RNA_def_property_ui_text(prop, "Use Material", "Use the material from this object at this level of detail");
RNA_def_property_ui_icon(prop, ICON_MATERIAL, 0);
RNA_def_property_update(prop, NC_LOD, NULL);
Modified: branches/soc-2013-bge/source/gameengine/Converter/BL_BlenderDataConversion.cpp
===================================================================
--- branches/soc-2013-bge/source/gameengine/Converter/BL_BlenderDataConversion.cpp 2013-09-14 00:30:56 UTC (rev 60126)
+++ branches/soc-2013-bge/source/gameengine/Converter/BL_BlenderDataConversion.cpp 2013-09-14 00:32:58 UTC (rev 60127)
@@ -2006,10 +2006,10 @@
gameobj->AddLodMesh(meshobj);
for (; lod; lod = lod->next) {
if (!lod->source || lod->source->type != OB_MESH) continue;
- if (lod->use_mesh) {
+ if (lod->flags & OB_LOD_USE_MESH) {
lodmesh = static_cast<Mesh*>(lod->source->data);
}
- if (lod->use_mat) {
+ if (lod->flags & OB_LOD_USE_MAT) {
lodmatob = lod->source;
}
gameobj->AddLodMesh(BL_ConvertMesh(lodmesh, lodmatob, kxscene, converter, libloading));
More information about the Bf-blender-cvs
mailing list