diff options
Diffstat (limited to 'source/blender/draw/engines/overlay/overlay_engine.c')
-rw-r--r-- | source/blender/draw/engines/overlay/overlay_engine.c | 43 |
1 files changed, 21 insertions, 22 deletions
diff --git a/source/blender/draw/engines/overlay/overlay_engine.c b/source/blender/draw/engines/overlay/overlay_engine.c index 561e146045c..5ad24246238 100644 --- a/source/blender/draw/engines/overlay/overlay_engine.c +++ b/source/blender/draw/engines/overlay/overlay_engine.c @@ -366,46 +366,51 @@ static void OVERLAY_draw_scene(void *vedata) OVERLAY_antialiasing_start(vedata); DRW_view_set_active(NULL); + OVERLAY_outline_draw(vedata); - DRW_view_set_active(pd->view_default); + if (DRW_state_is_fbo()) { + GPU_framebuffer_bind(fbl->overlay_default_fb); + } OVERLAY_image_draw(vedata); OVERLAY_facing_draw(vedata); + + if (DRW_state_is_fbo()) { + GPU_framebuffer_bind(fbl->overlay_line_fb); + } + OVERLAY_wireframe_draw(vedata); OVERLAY_armature_draw(vedata); OVERLAY_particle_draw(vedata); OVERLAY_metaball_draw(vedata); OVERLAY_extra_draw(vedata); - DRW_view_set_active(NULL); - OVERLAY_grid_draw(vedata); + if (DRW_state_is_fbo()) { + GPU_framebuffer_bind(fbl->overlay_color_only_fb); + } - DRW_view_set_active(pd->view_default); + OVERLAY_grid_draw(vedata); if (DRW_state_is_fbo()) { - GPU_framebuffer_bind(fbl->overlay_in_front_fb); - - /* If we are not in solid shading mode, we clear the depth. */ - if (pd->clear_in_front) { - /* TODO(fclem) This clear should be done in a global place. */ - GPU_framebuffer_clear_depth(fbl->overlay_in_front_fb, 1.0f); - } + GPU_framebuffer_bind(fbl->overlay_line_in_front_fb); } OVERLAY_wireframe_in_front_draw(vedata); OVERLAY_armature_in_front_draw(vedata); OVERLAY_extra_in_front_draw(vedata); OVERLAY_metaball_in_front_draw(vedata); - OVERLAY_image_in_front_draw(vedata); if (DRW_state_is_fbo()) { - GPU_framebuffer_bind(fbl->overlay_default_fb); + GPU_framebuffer_bind(fbl->overlay_color_only_fb); } + OVERLAY_image_in_front_draw(vedata); OVERLAY_motion_path_draw(vedata); OVERLAY_extra_centers_draw(vedata); + /* Functions after this point can change FBO freely. */ + switch (pd->ctx_mode) { case CTX_MODE_EDIT_MESH: OVERLAY_edit_mesh_draw(vedata); @@ -415,26 +420,20 @@ static void OVERLAY_draw_scene(void *vedata) OVERLAY_edit_curve_draw(vedata); break; case CTX_MODE_EDIT_TEXT: - /* Text overlay need final color for color inversion. */ - OVERLAY_antialiasing_end(vedata); OVERLAY_edit_text_draw(vedata); - return; /* WATCH! dont do AA twice. */ + break; case CTX_MODE_EDIT_LATTICE: OVERLAY_edit_lattice_draw(vedata); break; case CTX_MODE_POSE: - /* Pain overlay needs final color because of multiply blend mode. */ - OVERLAY_antialiasing_end(vedata); OVERLAY_paint_draw(vedata); OVERLAY_pose_draw(vedata); - return; /* WATCH! dont do AA twice. */ + break; case CTX_MODE_PAINT_WEIGHT: case CTX_MODE_PAINT_VERTEX: case CTX_MODE_PAINT_TEXTURE: - /* Pain overlay need final color because of multiply blend mode. */ - OVERLAY_antialiasing_end(vedata); OVERLAY_paint_draw(vedata); - return; /* WATCH! dont do AA twice. */ + break; case CTX_MODE_PARTICLE: OVERLAY_edit_particle_draw(vedata); break; |