diff options
author | Campbell Barton <ideasman42@gmail.com> | 2019-01-23 05:21:49 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2019-01-23 05:34:55 +0300 |
commit | 14d947dcadea7c9debe6c8a078a571eba6cb828c (patch) | |
tree | baed2bc9dd567ab509133cd72984b11fec919f2e /source/blender/draw/intern | |
parent | c403508e41c67367d1fdd725065951063d5ae7b2 (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.h | 12 | ||||
-rw-r--r-- | source/blender/draw/intern/draw_manager.c | 5 |
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 |