Fix T44691 Freestyle render crashes when Views is on (Blender Internal).
In pipeline.c the function add_freestyle() was supposed to be called once per frame, but after the Multi-view merge the function are called as many as the number of views. There were however a few Freestyle parameters that have to be initialized per frame, and initializing one of the parameters for each view was causing double freeing of allocated memory which was enough to result in a crash.
This commit is contained in:
@@ -576,7 +576,7 @@ int FRS_is_freestyle_enabled(SceneRenderLayer *srl)
|
||||
return (!(srl->layflag & SCE_LAY_DISABLE) && srl->layflag & SCE_LAY_FRS && displayed_layer_count(srl) > 0);
|
||||
}
|
||||
|
||||
void FRS_init_stroke_rendering(Render *re)
|
||||
void FRS_init_stroke_renderer(Render *re)
|
||||
{
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << endl;
|
||||
@@ -586,11 +586,15 @@ void FRS_init_stroke_rendering(Render *re)
|
||||
}
|
||||
|
||||
init_view(re);
|
||||
init_camera(re);
|
||||
|
||||
controller->ResetRenderCount();
|
||||
}
|
||||
|
||||
void FRS_begin_stroke_rendering(Render *re)
|
||||
{
|
||||
init_camera(re);
|
||||
}
|
||||
|
||||
Render *FRS_do_stroke_rendering(Render *re, SceneRenderLayer *srl, int render)
|
||||
{
|
||||
Render *freestyle_render = NULL;
|
||||
@@ -645,7 +649,7 @@ Render *FRS_do_stroke_rendering(Render *re, SceneRenderLayer *srl, int render)
|
||||
return freestyle_render;
|
||||
}
|
||||
|
||||
void FRS_finish_stroke_rendering(Render * /*re*/)
|
||||
void FRS_end_stroke_rendering(Render * /*re*/)
|
||||
{
|
||||
// clear canvas
|
||||
controller->Clear();
|
||||
|
||||
Reference in New Issue
Block a user