From 4df0c46f838f7c316b10a6667705c093f067cadd Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Thu, 18 Apr 2013 08:58:21 +0000 Subject: Make freestyle use local Main for temporary objects This means main database is no longer pollutes with temporary scene and objects needed for freestyle render. Actually, there're few of separated temporary mains now. Ideally it's better to use single one, but it's not so much trivial to pass it to all classes. Not so big deal actually. Required some changes to blender kernel, to make it possible to add object to a given main, also to check on mesh materials for objects in given main. This is all straightforward changes. As an additional, solved issue with main database being infinitely polluted with text blocks created by create_lineset_handler function. This fixes: - #35003: Freestyle crashes if user expands objects in FRS1_Scene - #35012: ctrl+f12 rendering crashes when using Freestyle --- source/blender/render/intern/source/pipeline.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) (limited to 'source/blender/render') diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c index 7f2c3b5ad04..4e9d185becf 100644 --- a/source/blender/render/intern/source/pipeline.c +++ b/source/blender/render/intern/source/pipeline.c @@ -1058,7 +1058,7 @@ static void threaded_tile_processor(Render *re) #ifdef WITH_FREESTYLE static void add_freestyle(Render *re); -static void free_all_freestyle_renders(Scene *scene); +static void free_all_freestyle_renders(void); #endif /* currently only called by preview renders and envmap */ @@ -1075,7 +1075,7 @@ void RE_TileProcessor(Render *re) if (!re->test_break(re->tbh)) { add_freestyle(re); - free_all_freestyle_renders(re->scene); + free_all_freestyle_renders(); re->i.lastframetime = PIL_check_seconds_timer() - re->i.starttime; re->stats_draw(re->sdh, &re->i); @@ -1653,7 +1653,7 @@ static void composite_freestyle_renders(Render *re, int sample) } /* releases temporary scenes and renders for Freestyle stroke rendering */ -static void free_all_freestyle_renders(Scene *scene) +static void free_all_freestyle_renders(void) { Render *re1, *freestyle_render; LinkData *link; @@ -1662,7 +1662,6 @@ static void free_all_freestyle_renders(Scene *scene) for (link = (LinkData *)re1->freestyle_renders.first; link; link = link->next) { if (link->data) { freestyle_render = (Render *)link->data; - BKE_scene_unlink(G.main, freestyle_render->scene, scene); RE_FreeRender(freestyle_render); } } @@ -1918,7 +1917,7 @@ static void do_render_composite_fields_blur_3d(Render *re) } #ifdef WITH_FREESTYLE - free_all_freestyle_renders(re->scene); + free_all_freestyle_renders(); #endif /* weak... the display callback wants an active renderlayer pointer... */ -- cgit v1.2.3