Fix T94169: Missing grease pencil render with tiled rendering
Delay grease pencil for until after the render result is written to the Blender side. Differential Revision: https://developer.blender.org/D13740
This commit is contained in:
@@ -922,8 +922,10 @@ static void engine_render_view_layer(Render *re,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Optionally composite grease pencil over render result. */
|
/* Optionally composite grease pencil over render result.
|
||||||
if (engine->has_grease_pencil && use_grease_pencil) {
|
* Only do it if the passes are allocated (and the engine will not override the grease pencil
|
||||||
|
* when reading its result from EXR file and writing to the Blender side. */
|
||||||
|
if (engine->has_grease_pencil && use_grease_pencil && re->result->passes_allocated) {
|
||||||
/* NOTE: External engine might have been requested to free its
|
/* NOTE: External engine might have been requested to free its
|
||||||
* dependency graph, which is only allowed if there is no grease
|
* dependency graph, which is only allowed if there is no grease
|
||||||
* pencil (pipeline is taking care of that). */
|
* pencil (pipeline is taking care of that). */
|
||||||
@@ -1022,10 +1024,18 @@ bool RE_engine_render(Render *re, bool do_all)
|
|||||||
re->draw_lock(re->dlh, false);
|
re->draw_lock(re->dlh, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Render view layers. */
|
||||||
|
bool delay_grease_pencil = false;
|
||||||
|
|
||||||
if (type->render) {
|
if (type->render) {
|
||||||
FOREACH_VIEW_LAYER_TO_RENDER_BEGIN (re, view_layer_iter) {
|
FOREACH_VIEW_LAYER_TO_RENDER_BEGIN (re, view_layer_iter) {
|
||||||
engine_render_view_layer(re, engine, view_layer_iter, true, true);
|
engine_render_view_layer(re, engine, view_layer_iter, true, true);
|
||||||
|
|
||||||
|
/* If render passes are not allocated the render engine deferred final pixels write for
|
||||||
|
* later. Need to defer the grease pencil for until after the engine has written the
|
||||||
|
* render result to Blender. */
|
||||||
|
delay_grease_pencil = engine->has_grease_pencil && !re->result->passes_allocated;
|
||||||
|
|
||||||
if (RE_engine_test_break(engine)) {
|
if (RE_engine_test_break(engine)) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -1037,6 +1047,17 @@ bool RE_engine_render(Render *re, bool do_all)
|
|||||||
type->render_frame_finish(engine);
|
type->render_frame_finish(engine);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Perform delayed grease pencil rendering. */
|
||||||
|
if (delay_grease_pencil) {
|
||||||
|
FOREACH_VIEW_LAYER_TO_RENDER_BEGIN (re, view_layer_iter) {
|
||||||
|
engine_render_view_layer(re, engine, view_layer_iter, false, true);
|
||||||
|
if (RE_engine_test_break(engine)) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FOREACH_VIEW_LAYER_TO_RENDER_END;
|
||||||
|
}
|
||||||
|
|
||||||
/* Clear tile data */
|
/* Clear tile data */
|
||||||
engine->flag &= ~RE_ENGINE_RENDERING;
|
engine->flag &= ~RE_ENGINE_RENDERING;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user