forked from bartvdbraak/blender
Fix crash drawing non-mesh geometry
This commit is contained in:
parent
c2f6ca313e
commit
12bd960df9
@ -211,8 +211,8 @@ typedef struct DRWCall {
|
|||||||
float obmat[4][4];
|
float obmat[4][4];
|
||||||
Batch *geometry;
|
Batch *geometry;
|
||||||
|
|
||||||
Mesh *mesh; /* Optional. */
|
Object *ob; /* Optional */
|
||||||
Object *ob; /* Optionnal */
|
ID *ob_data; /* Optional. */
|
||||||
} DRWCall;
|
} DRWCall;
|
||||||
|
|
||||||
typedef struct DRWCallGenerate {
|
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);
|
copy_m4_m4(call->obmat, ob->obmat);
|
||||||
call->geometry = geom;
|
call->geometry = geom;
|
||||||
call->mesh = ob->data;
|
call->ob_data = ob->data;
|
||||||
|
|
||||||
BLI_addtail(&shgroup->calls, call);
|
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 *texcoloc = NULL;
|
||||||
float *texcosize = NULL;
|
float *texcosize = NULL;
|
||||||
|
|
||||||
if (me != NULL) {
|
if (ob_data != NULL) {
|
||||||
BKE_mesh_texspace_get_reference(me, NULL, &texcoloc, NULL, &texcosize);
|
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);
|
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);
|
GPU_SELECT_LOAD_IF_PICKSEL(call);
|
||||||
|
|
||||||
if (call->head.type == DRW_CALL_SINGLE) {
|
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 {
|
else {
|
||||||
BLI_assert(call->head.type == DRW_CALL_GENERATE);
|
BLI_assert(call->head.type == DRW_CALL_GENERATE);
|
||||||
|
Loading…
Reference in New Issue
Block a user