[Bf-blender-cvs] [81283b1c81e] master: DRW: Fix rasterizer discard messing with clear commands
Clément Foucault
noreply at git.blender.org
Tue Mar 5 17:24:41 CET 2019
Commit: 81283b1c81e30623a2c7d97763bfe264c93a0d28
Author: Clément Foucault
Date: Tue Mar 5 16:42:18 2019 +0100
Branches: master
https://developer.blender.org/rB81283b1c81e30623a2c7d97763bfe264c93a0d28
DRW: Fix rasterizer discard messing with clear commands
Fixes T62179 Viewport Ghosting on rigs
===================================================================
M source/blender/draw/intern/DRW_render.h
M source/blender/draw/intern/draw_manager_exec.c
===================================================================
diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h
index d79b7caf5e7..dee686e270e 100644
--- a/source/blender/draw/intern/DRW_render.h
+++ b/source/blender/draw/intern/DRW_render.h
@@ -306,6 +306,8 @@ typedef enum {
DRW_STATE_STENCIL_NEQUAL = (1 << 31),
} DRWState;
#define DRW_STATE_DEFAULT (DRW_STATE_WRITE_DEPTH | DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_LESS_EQUAL)
+#define DRW_STATE_RASTERIZER_ENABLED (DRW_STATE_WRITE_DEPTH | DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_STENCIL | \
+ DRW_STATE_WRITE_STENCIL_SHADOW_PASS | DRW_STATE_WRITE_STENCIL_SHADOW_FAIL)
typedef enum {
DRW_ATTR_INT,
diff --git a/source/blender/draw/intern/draw_manager_exec.c b/source/blender/draw/intern/draw_manager_exec.c
index 352ce913fb7..56b0fb1faf2 100644
--- a/source/blender/draw/intern/draw_manager_exec.c
+++ b/source/blender/draw/intern/draw_manager_exec.c
@@ -97,15 +97,9 @@ void drw_state_set(DRWState state)
/* Raster Discard */
{
- if (CHANGED_ANY(DRW_STATE_WRITE_DEPTH | DRW_STATE_WRITE_COLOR |
- DRW_STATE_WRITE_STENCIL |
- DRW_STATE_WRITE_STENCIL_SHADOW_PASS |
- DRW_STATE_WRITE_STENCIL_SHADOW_FAIL))
+ if (CHANGED_ANY(DRW_STATE_RASTERIZER_ENABLED))
{
- if ((state & (DRW_STATE_WRITE_DEPTH | DRW_STATE_WRITE_COLOR |
- DRW_STATE_WRITE_STENCIL | DRW_STATE_WRITE_STENCIL_SHADOW_PASS |
- DRW_STATE_WRITE_STENCIL_SHADOW_FAIL)) != 0)
- {
+ if ((state & DRW_STATE_RASTERIZER_ENABLED) != 0) {
glDisable(GL_RASTERIZER_DISCARD);
}
else {
@@ -1355,6 +1349,13 @@ static void drw_draw_pass_ex(DRWPass *pass, DRWShadingGroup *start_group, DRWSha
DST.shader = NULL;
}
+ /* HACK: Rasterized discard can affect clear commands which are not
+ * part of a DRWPass (as of now). So disable rasterized discard here
+ * if it has been enabled. */
+ if ((DST.state & DRW_STATE_RASTERIZER_ENABLED) == 0) {
+ drw_state_set((DST.state & ~DRW_STATE_RASTERIZER_ENABLED) | DRW_STATE_DEFAULT);
+ }
+
DRW_stats_query_end();
}
More information about the Bf-blender-cvs
mailing list