commit c996e621aeec7c95b8bbe9df0c041f7f3f4a8436
parent 72582a467d9ec822dbb8d18a475dc521cb6466e3
Author: Vincent Forest <vincent.forest@meso-star.com>
Date: Wed, 17 Jun 2015 18:12:54 +0200
Fix a shape registration issue
On scene begin trace, the s3d shapes are registered into an arrays
indexed by their associated Embree ID. In some circumstances, this
registration was not performed and consequently an Embree ID could
map to an invalid s3d shape leading to memory corruptions
Diffstat:
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/src/s3d_scene.c b/src/s3d_scene.c
@@ -87,9 +87,9 @@ scene_build_register_mesh(struct s3d_scene* scn, struct mesh* mesh)
mesh->geom.irtc = RTC_INVALID_GEOMETRY_ID;
return res;
}
- mesh_ref_get(mesh);
- darray_mesh_data_get(&scn->meshes)[mesh->geom.irtc] = mesh;
}
+ mesh_ref_get(mesh);
+ darray_mesh_data_get(&scn->meshes)[mesh->geom.irtc] = mesh;
return RES_OK;
}
@@ -114,9 +114,9 @@ scene_build_register_instance(struct s3d_scene* scn, struct instance* inst)
inst->geom.irtc = RTC_INVALID_GEOMETRY_ID;
return res;
}
- instance_ref_get(inst);
- darray_inst_data_get(&scn->instances)[inst->geom.irtc] = inst;
}
+ instance_ref_get(inst);
+ darray_inst_data_get(&scn->instances)[inst->geom.irtc] = inst;
return RES_OK;
}
@@ -666,6 +666,7 @@ s3d_scene_trace_ray
hit->prim.iprim__ = ray.primID;
flip_surface = instance->flip_surface;
}
+ ASSERT(hit->prim.mesh__);
flip_surface ^= ((struct mesh*)hit->prim.mesh__)->flip_surface;
if(flip_surface)
f3_minus(hit->normal, hit->normal);