Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2019-01-23 05:21:49 +0300
committerCampbell Barton <ideasman42@gmail.com>2019-01-23 05:34:55 +0300
commit14d947dcadea7c9debe6c8a078a571eba6cb828c (patch)
treebaed2bc9dd567ab509133cd72984b11fec919f2e /source/blender/draw/intern
parentc403508e41c67367d1fdd725065951063d5ae7b2 (diff)
DRW: generalize selecting between regular/clipped shaders
Each engine was doing this on its own. Move to DRWContextState, use an enum.
Diffstat (limited to 'source/blender/draw/intern')
-rw-r--r--source/blender/draw/intern/DRW_render.h12
-rw-r--r--source/blender/draw/intern/draw_manager.c5
2 files changed, 17 insertions, 0 deletions
diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h
index bc1b156c1f6..72c55657748 100644
--- a/source/blender/draw/intern/DRW_render.h
+++ b/source/blender/draw/intern/DRW_render.h
@@ -567,6 +567,16 @@ bool DRW_state_show_text(void);
bool DRW_state_draw_support(void);
bool DRW_state_draw_background(void);
+/**
+ * Support selecting shaders with different options compiled in.
+ * Needed for clipping support because it means using a separate set of shaders.
+ */
+typedef enum eDRW_ShaderSlot {
+ DRW_SHADER_SLOT_DEFAULT = 0,
+ DRW_SHADER_SLOT_CLIPPED = 1,
+} eDRW_ShaderSlot;
+#define DRW_SHADER_SLOT_LEN 2
+
/* Avoid too many lookups while drawing */
typedef struct DRWContextState {
@@ -586,6 +596,8 @@ typedef struct DRWContextState {
eObjectMode object_mode;
+ eDRW_ShaderSlot shader_slot;
+
/* Last resort (some functions take this as an arg so we can't easily avoid).
* May be NULL when used for selection or depth buffer. */
const struct bContext *evil_C;
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index 4f79f4e46c1..c47ab00c841 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -543,6 +543,11 @@ static void drw_context_state_init(void)
else {
DST.draw_ctx.object_pose = NULL;
}
+
+ DST.draw_ctx.shader_slot = DRW_SHADER_SLOT_DEFAULT;
+ if (DST.draw_ctx.rv3d && DST.draw_ctx.rv3d->rflag & RV3D_CLIPPING) {
+ DST.draw_ctx.shader_slot = DRW_SHADER_SLOT_CLIPPED;
+ }
}
/* It also stores viewport variable to an immutable place: DST