Fix #134914: Backdrop remain after loading new file
The compositor backdrop is still visible even after a new completely different file is loaded. This is because compositor contexts cache things like the backdrop, and contexts are stored on interactive compositor renders, which are not freed until Blender is closed. To fix this, we cleanup the interactive compositor renders that were created upon file load. Pull Request: https://projects.blender.org/blender/blender/pulls/135390
This commit is contained in:
@@ -929,9 +929,11 @@ static void setup_app_data(bContext *C,
|
||||
mode = LOAD_UI;
|
||||
}
|
||||
|
||||
/* Free all render results, without this stale data gets displayed after loading files */
|
||||
/* Free all render results and interactive compositor renders, without this stale data gets
|
||||
* displayed after loading files */
|
||||
if (mode != LOAD_UNDO) {
|
||||
RE_FreeAllRenderResults();
|
||||
RE_FreeInteractiveCompositorRenders();
|
||||
}
|
||||
|
||||
/* Only make file-paths compatible when loading for real (not undo). */
|
||||
|
||||
@@ -194,6 +194,11 @@ void RE_FreeViewRender(struct ViewRender *view_render);
|
||||
*/
|
||||
void RE_FreeAllRender(void);
|
||||
|
||||
/**
|
||||
* On file load, free all interactive compositor renders.
|
||||
*/
|
||||
void RE_FreeInteractiveCompositorRenders(void);
|
||||
|
||||
/**
|
||||
* On file load, free render results.
|
||||
*/
|
||||
|
||||
@@ -613,10 +613,7 @@ void RE_FreeAllRender()
|
||||
RE_FreeRender(static_cast<Render *>(RenderGlobal.render_list.front()));
|
||||
}
|
||||
|
||||
for (Render *render : RenderGlobal.interactive_compositor_renders.values()) {
|
||||
RE_FreeRender(render);
|
||||
}
|
||||
RenderGlobal.interactive_compositor_renders.clear();
|
||||
RE_FreeInteractiveCompositorRenders();
|
||||
|
||||
#ifdef WITH_FREESTYLE
|
||||
/* finalize Freestyle */
|
||||
@@ -624,6 +621,14 @@ void RE_FreeAllRender()
|
||||
#endif
|
||||
}
|
||||
|
||||
void RE_FreeInteractiveCompositorRenders()
|
||||
{
|
||||
for (Render *render : RenderGlobal.interactive_compositor_renders.values()) {
|
||||
RE_FreeRender(render);
|
||||
}
|
||||
RenderGlobal.interactive_compositor_renders.clear();
|
||||
}
|
||||
|
||||
void RE_FreeAllRenderResults()
|
||||
{
|
||||
for (Render *re : RenderGlobal.render_list) {
|
||||
|
||||
Reference in New Issue
Block a user