forked from bartvdbraak/blender
GreasePencil: Image render artifacts
When doing image rendering with grease pencil, it reused the view of workbench or EEVEE. These views might be offsetted due to TAA. This shifted the view a tiny bit. We will not reset the view in between render engines. Reviewed By: fclem Differential Revision: https://developer.blender.org/D5171
This commit is contained in:
parent
2ee257e2c3
commit
e2bf240cbf
@ -103,12 +103,9 @@ void GPENCIL_render_init(GPENCIL_Data *ved, RenderEngine *engine, struct Depsgra
|
||||
|
||||
invert_m4_m4(viewmat, viewinv);
|
||||
|
||||
/* Reuse the view created by EEVEE or Workbench */
|
||||
if (DRW_view_default_get() == NULL) {
|
||||
DRWView *view = DRW_view_create(viewmat, winmat, NULL, NULL, NULL);
|
||||
DRW_view_default_set(view);
|
||||
DRW_view_set_active(view);
|
||||
}
|
||||
DRWView *view = DRW_view_create(viewmat, winmat, NULL, NULL, NULL);
|
||||
DRW_view_default_set(view);
|
||||
DRW_view_set_active(view);
|
||||
|
||||
DRW_view_persmat_get(NULL, persmat, false);
|
||||
|
||||
|
@ -284,7 +284,9 @@ void workbench_taa_draw_scene_end(WORKBENCH_Data *vedata)
|
||||
|
||||
GPU_framebuffer_blit(dfbl->color_only_fb, 0, fbl->effect_taa_fb, 0, GPU_COLOR_BIT);
|
||||
|
||||
DRW_view_set_active(NULL);
|
||||
if (!DRW_state_is_image_render()) {
|
||||
DRW_view_set_active(NULL);
|
||||
}
|
||||
|
||||
if (effect_info->jitter_index != 0 && !DRW_state_is_image_render()) {
|
||||
DRW_viewport_request_redraw();
|
||||
|
@ -1916,6 +1916,13 @@ void DRW_render_gpencil(struct RenderEngine *engine, struct Depsgraph *depsgraph
|
||||
DST.buffer_finish_called = false;
|
||||
}
|
||||
|
||||
static void drw_view_reset()
|
||||
{
|
||||
DST.view_default = NULL;
|
||||
DST.view_active = NULL;
|
||||
DST.view_previous = NULL;
|
||||
}
|
||||
|
||||
void DRW_render_to_image(RenderEngine *engine, struct Depsgraph *depsgraph)
|
||||
{
|
||||
Scene *scene = DEG_get_evaluated_scene(depsgraph);
|
||||
@ -1998,14 +2005,12 @@ void DRW_render_to_image(RenderEngine *engine, struct Depsgraph *depsgraph)
|
||||
for (RenderView *render_view = render_result->views.first; render_view != NULL;
|
||||
render_view = render_view->next) {
|
||||
RE_SetActiveRenderView(render, render_view->name);
|
||||
/* Reset the view. */
|
||||
DST.view_default = NULL;
|
||||
DST.view_active = NULL;
|
||||
DST.view_previous = NULL;
|
||||
drw_view_reset();
|
||||
engine_type->draw_engine->render_to_image(data, engine, render_layer, &render_rect);
|
||||
/* grease pencil: render result is merged in the previous render result. */
|
||||
if (DRW_render_check_grease_pencil(depsgraph)) {
|
||||
DRW_state_reset();
|
||||
drw_view_reset();
|
||||
DRW_render_gpencil_to_image(engine, render_layer, &render_rect);
|
||||
}
|
||||
DST.buffer_finish_called = false;
|
||||
|
Loading…
Reference in New Issue
Block a user