Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2017-06-12 07:43:19 +0300
committerCampbell Barton <ideasman42@gmail.com>2017-06-12 07:43:19 +0300
commit12bd960df9bb9d96477b9913df8aec6fc7d87f95 (patch)
tree0d883452f88092f39d1ddf78994b6e066730fe03 /source
parentc2f6ca313e14b8ec97b8839965aac9ae45a3f45b (diff)
Fix crash drawing non-mesh geometry
Diffstat (limited to 'source')
-rw-r--r--source/blender/draw/intern/draw_manager.c20
1 files changed, 13 insertions, 7 deletions
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index 3b4c65fb54b..db6c5697764 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -211,8 +211,8 @@ typedef struct DRWCall {
float obmat[4][4];
Batch *geometry;
- Mesh *mesh; /* Optional. */
- Object *ob; /* Optionnal */
+ Object *ob; /* Optional */
+ ID *ob_data; /* Optional. */
} DRWCall;
typedef struct DRWCallGenerate {
@@ -878,7 +878,7 @@ void DRW_shgroup_call_object_add(DRWShadingGroup *shgroup, Batch *geom, Object *
copy_m4_m4(call->obmat, ob->obmat);
call->geometry = geom;
- call->mesh = ob->data;
+ call->ob_data = ob->data;
BLI_addtail(&shgroup->calls, call);
}
@@ -1649,13 +1649,19 @@ static void draw_geometry_execute(DRWShadingGroup *shgroup, Batch *geom)
}
}
-static void draw_geometry(DRWShadingGroup *shgroup, Batch *geom, const float (*obmat)[4], Mesh *me)
+static void draw_geometry(DRWShadingGroup *shgroup, Batch *geom, const float (*obmat)[4], ID *ob_data)
{
float *texcoloc = NULL;
float *texcosize = NULL;
- if (me != NULL) {
- BKE_mesh_texspace_get_reference(me, NULL, &texcoloc, NULL, &texcosize);
+ if (ob_data != NULL) {
+ switch (GS(ob_data->name)) {
+ case OB_MESH:
+ BKE_mesh_texspace_get_reference((Mesh *)ob_data, NULL, &texcoloc, NULL, &texcosize);
+ /* TODO, curve, metaball? */
+ default:
+ break;
+ }
}
draw_geometry_prepare(shgroup, obmat, texcoloc, texcosize);
@@ -1792,7 +1798,7 @@ static void draw_shgroup(DRWShadingGroup *shgroup, DRWState pass_state)
GPU_SELECT_LOAD_IF_PICKSEL(call);
if (call->head.type == DRW_CALL_SINGLE) {
- draw_geometry(shgroup, call->geometry, call->obmat, call->mesh);
+ draw_geometry(shgroup, call->geometry, call->obmat, call->ob_data);
}
else {
BLI_assert(call->head.type == DRW_CALL_GENERATE);