diff options
author | Antonio Vazquez <blendergit@gmail.com> | 2020-03-09 18:27:24 +0300 |
---|---|---|
committer | Antonio Vazquez <blendergit@gmail.com> | 2020-03-09 18:27:24 +0300 |
commit | 29f3af95272590d26f610ae828b2eeee89c82a00 (patch) | |
tree | a696a58a2561c48f7ec6166e369e22081e0a64d8 /source/blender/draw/intern/draw_manager.c | |
parent | dcb93126876879d969a30a7865700abd072066f8 (diff) |
GPencil: Refactor of Draw Engine, Vertex Paint and all internal functions
This commit is a full refactor of the grease pencil modules including Draw Engine, Modifiers, VFX, depsgraph update, improvements in operators and conversion of Sculpt and Weight paint tools to real brushes.
Also, a huge code cleanup has been done at all levels.
Thanks to @fclem for his work and yo @pepeland and @mendio for the testing and help in the development.
Differential Revision: https://developer.blender.org/D6293
Diffstat (limited to 'source/blender/draw/intern/draw_manager.c')
-rw-r--r-- | source/blender/draw/intern/draw_manager.c | 34 |
1 files changed, 8 insertions, 26 deletions
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c index 4ec49536211..85caf0825e0 100644 --- a/source/blender/draw/intern/draw_manager.c +++ b/source/blender/draw/intern/draw_manager.c @@ -1183,7 +1183,7 @@ static void drw_engines_enable(ViewLayer *UNUSED(view_layer), const bool use_xray = XRAY_ENABLED(v3d); drw_engines_enable_from_engine(engine_type, drawtype, use_xray); - if (gpencil_engine_needed) { + if (gpencil_engine_needed && ((drawtype >= OB_SOLID) || !use_xray)) { use_drw_engine(&draw_engine_gpencil_type); } drw_engines_enable_overlays(); @@ -1654,14 +1654,6 @@ static void DRW_render_gpencil_to_image(RenderEngine *engine, void DRW_render_gpencil(struct RenderEngine *engine, struct Depsgraph *depsgraph) { - /* This function is only valid for Cycles & Workbench - * Eevee does all work in the Eevee render directly. - * Maybe it can be done equal for all engines? - */ - if (STREQ(engine->type->name, "Eevee")) { - return; - } - /* Early out if there are no grease pencil objects, especially important * to avoid failing in in background renders without OpenGL context. */ if (!DRW_render_check_grease_pencil(depsgraph)) { @@ -1740,8 +1732,13 @@ void DRW_render_gpencil(struct RenderEngine *engine, struct Depsgraph *depsgraph GPU_framebuffer_restore(); /* Changing Context */ - /* GPXX Review this context */ - DRW_opengl_context_disable(); + if (re_gl_context != NULL) { + DRW_gpu_render_context_disable(re_gpu_context); + DRW_opengl_render_context_disable(re_gl_context); + } + else { + DRW_opengl_context_disable(); + } DST.buffer_finish_called = false; } @@ -1838,14 +1835,6 @@ void DRW_render_to_image(RenderEngine *engine, struct Depsgraph *depsgraph) drw_view_reset(); engine_type->draw_engine->render_to_image(data, engine, render_layer, &render_rect); DST.buffer_finish_called = false; - - /* 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; - } } RE_engine_end_result(engine, render_result, false, false, false); @@ -2215,13 +2204,6 @@ void DRW_draw_select_loop(struct Depsgraph *depsgraph, } } - /* TODO: GPXX Workaround for grease pencil selection while draw manager support a callback from - * scene finish */ - void *data = GPU_viewport_engine_data_get(DST.viewport, &draw_engine_gpencil_type); - if (data != NULL) { - DRW_gpencil_free_runtime_data(data); - } - DRW_state_lock(0); DRW_state_reset(); |