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-02-06 01:15:16 +0300
committerCampbell Barton <ideasman42@gmail.com>2019-02-06 01:15:16 +0300
commitdbd7f36da8ec3ac1c2898aee346beecb86aac8a2 (patch)
tree0d77061a4305b7bcfef13bb753089e5f6f21e7c3 /source/blender/gpu/GPU_shader.h
parenta245d533514e335f028cfa6cdb26614ed0982484 (diff)
GPU: refactor clipped drawing from DRW into GPU
Needed to fix T61196, supporting clipped back-buffer in the 3D view which is done outside the draw module. It was also inconvenient having DRW_shader_* versions of GPU_shader_* API calls. - Clipping distances are now supported as a shader configuration for builtin shaders. - Add shader config argument when accessing builtin shaders. - Move GPU_shader_create_from_arrays() from DRW to GPU.
Diffstat (limited to 'source/blender/gpu/GPU_shader.h')
-rw-r--r--source/blender/gpu/GPU_shader.h21
1 files changed, 18 insertions, 3 deletions
diff --git a/source/blender/gpu/GPU_shader.h b/source/blender/gpu/GPU_shader.h
index d2380d27464..428c7634195 100644
--- a/source/blender/gpu/GPU_shader.h
+++ b/source/blender/gpu/GPU_shader.h
@@ -60,6 +60,12 @@ GPUShader *GPU_shader_create_ex(
const char **tf_names,
const int tf_count,
const char *shader_name);
+struct GPU_ShaderCreateFromArray_Params { const char **vert, **geom, **frag, **defs; };
+struct GPUShader *GPU_shader_create_from_arrays_impl(
+ const struct GPU_ShaderCreateFromArray_Params *params);
+#define GPU_shader_create_from_arrays(...) \
+ GPU_shader_create_from_arrays_impl(&(const struct GPU_ShaderCreateFromArray_Params)__VA_ARGS__)
+
void GPU_shader_free(GPUShader *shader);
void GPU_shader_bind(GPUShader *shader);
@@ -350,9 +356,15 @@ typedef enum eGPUBuiltinShader {
/* Selection */
GPU_SHADER_3D_FLAT_SELECT_ID,
GPU_SHADER_3D_UNIFORM_SELECT_ID,
-
- GPU_NUM_BUILTIN_SHADERS /* (not an actual shader) */
} eGPUBuiltinShader;
+#define GPU_SHADER_BUILTIN_LEN (GPU_SHADER_3D_UNIFORM_SELECT_ID + 1)
+
+/** Support multiple configurations. */
+typedef enum eGPUShaderConfig {
+ GPU_SHADER_CFG_DEFAULT = 0,
+ GPU_SHADER_CFG_CLIPPED = 1,
+} eGPUShaderConfig;
+#define GPU_SHADER_CFG_LEN (GPU_SHADER_CFG_CLIPPED + 1)
/** Keep these in sync with:
* - `gpu_shader_image_interlace_frag.glsl`
@@ -364,7 +376,10 @@ typedef enum eGPUInterlaceShader {
GPU_SHADER_INTERLACE_CHECKER = 2,
} eGPUInterlaceShader;
-GPUShader *GPU_shader_get_builtin_shader(eGPUBuiltinShader shader);
+GPUShader *GPU_shader_get_builtin_shader_with_config(
+ eGPUBuiltinShader shader, eGPUShaderConfig shader_cfg);
+GPUShader *GPU_shader_get_builtin_shader(
+ eGPUBuiltinShader shader);
void GPU_shader_get_builtin_shader_code(
eGPUBuiltinShader shader,