diff options
author | Andre Susano Pinto <andresusanopinto@gmail.com> | 2009-10-08 15:24:06 +0400 |
---|---|---|
committer | Andre Susano Pinto <andresusanopinto@gmail.com> | 2009-10-08 15:24:06 +0400 |
commit | 208d57323e2c1db5432aceebab7216f545410d74 (patch) | |
tree | 7b152e2bd5ddf7611a8f2b023b37184fdf8f7c0e /source/blender/render/intern | |
parent | c1302cfa95b725601bfb35760cc670b92bc2ae57 (diff) |
Fixed #19571
(was crashing when building a raytree from a scene withouth any geometry)
Diffstat (limited to 'source/blender/render/intern')
-rw-r--r-- | source/blender/render/intern/raytrace/rayobject.cpp | 40 | ||||
-rw-r--r-- | source/blender/render/intern/source/rayshade.c | 6 |
2 files changed, 46 insertions, 0 deletions
diff --git a/source/blender/render/intern/raytrace/rayobject.cpp b/source/blender/render/intern/raytrace/rayobject.cpp index 95387cf1ee4..621fd3f794e 100644 --- a/source/blender/render/intern/raytrace/rayobject.cpp +++ b/source/blender/render/intern/raytrace/rayobject.cpp @@ -535,3 +535,43 @@ int RE_rayobjectcontrol_test_break(RayObjectControl *control) return 0; } + + +/* + * Empty raytree + */ +static int RE_rayobject_empty_intersect(RayObject *o, Isect *is) +{ + return 0; +} + +static void RE_rayobject_empty_free(RayObject *o) +{ +} + +static void RE_rayobject_empty_bb(RayObject *o, float *min, float *max) +{ + return; +} + +static float RE_rayobject_empty_cost(RayObject *o) +{ + return 0.0; +} + +static RayObjectAPI empty_api = +{ + RE_rayobject_empty_intersect, + NULL, //static void RE_rayobject_instance_add(RayObject *o, RayObject *ob); + NULL, //static void RE_rayobject_instance_done(RayObject *o); + RE_rayobject_empty_free, + RE_rayobject_empty_bb, + RE_rayobject_empty_cost +}; + +static RayObject empty_raytree = { &empty_api, {0, 0} }; + +RayObject *RE_rayobject_empty_create() +{ + return RE_rayobject_unalignRayAPI( &empty_raytree ); +} diff --git a/source/blender/render/intern/source/rayshade.c b/source/blender/render/intern/source/rayshade.c index 881a549ad96..4ad4d6370f8 100644 --- a/source/blender/render/intern/source/rayshade.c +++ b/source/blender/render/intern/source/rayshade.c @@ -335,6 +335,12 @@ static void makeraytree_single(Render *re) } } + if(faces + special == 0) + { + re->raytree = RE_rayobject_empty_create(); + return; + } + //Create raytree raytree = re->raytree = RE_rayobject_create( re, re->r.raytrace_structure, faces+special ); |