GPUShader: Add GPU_SHADER_2D_WIDGET_BASE_INST shader.
This will let us draw multiple widget base at once.
This commit is contained in:
parent
4a73127a2b
commit
fcb4aaf7a9
|
@ -173,6 +173,7 @@ typedef enum GPUBuiltinShader {
|
|||
GPU_SHADER_INSTANCE_EDGES_VARIYING_COLOR,
|
||||
/* specialized for UI drawing */
|
||||
GPU_SHADER_2D_WIDGET_BASE,
|
||||
GPU_SHADER_2D_WIDGET_BASE_INST,
|
||||
GPU_SHADER_2D_WIDGET_SHADOW,
|
||||
GPU_SHADER_2D_NODELINK,
|
||||
GPU_SHADER_2D_NODELINK_INST,
|
||||
|
|
|
@ -803,6 +803,8 @@ GPUShader *GPU_shader_get_builtin_shader(GPUBuiltinShader shader)
|
|||
|
||||
[GPU_SHADER_2D_WIDGET_BASE] = { datatoc_gpu_shader_2D_widget_base_vert_glsl,
|
||||
datatoc_gpu_shader_2D_smooth_color_frag_glsl},
|
||||
[GPU_SHADER_2D_WIDGET_BASE_INST] = { datatoc_gpu_shader_2D_widget_base_vert_glsl,
|
||||
datatoc_gpu_shader_2D_smooth_color_frag_glsl},
|
||||
[GPU_SHADER_2D_WIDGET_SHADOW] = { datatoc_gpu_shader_2D_widget_shadow_vert_glsl,
|
||||
datatoc_gpu_shader_2D_widget_shadow_frag_glsl },
|
||||
[GPU_SHADER_2D_NODELINK] = { datatoc_gpu_shader_2D_nodelink_vert_glsl,
|
||||
|
@ -823,6 +825,7 @@ GPUShader *GPU_shader_get_builtin_shader(GPUBuiltinShader shader)
|
|||
/* just a few special cases */
|
||||
const char *defines = NULL;
|
||||
switch (shader) {
|
||||
case GPU_SHADER_2D_WIDGET_BASE_INST:
|
||||
case GPU_SHADER_2D_NODELINK_INST:
|
||||
defines = "#define USE_INSTANCE;\n";
|
||||
break;
|
||||
|
|
|
@ -71,24 +71,30 @@ const vec2 triavec[34] = vec2[34](
|
|||
|
||||
uniform mat4 ModelViewProjectionMatrix;
|
||||
|
||||
#ifdef USE_INSTANCE
|
||||
#define MAX_INSTANCE 6
|
||||
uniform vec4 parameters[11 * MAX_INSTANCE];
|
||||
#else
|
||||
uniform vec4 parameters[11];
|
||||
/* radi and rad per corner */
|
||||
#define recti parameters[0]
|
||||
#define rect parameters[1]
|
||||
#define radsi parameters[2].x
|
||||
#define rads parameters[2].y
|
||||
#define faci parameters[2].zw
|
||||
#define roundCorners parameters[3]
|
||||
#define colorInner1 parameters[4]
|
||||
#define colorInner2 parameters[5]
|
||||
#define colorEdge parameters[6]
|
||||
#define colorEmboss parameters[7]
|
||||
#define colorTria parameters[8]
|
||||
#define tria1Center parameters[9].xy
|
||||
#define tria2Center parameters[9].zw
|
||||
#define tria1Size parameters[10].x
|
||||
#define tria2Size parameters[10].y
|
||||
#define shadeDir parameters[10].z
|
||||
#endif
|
||||
|
||||
/* gl_InstanceID is 0 if not drawing instances. */
|
||||
#define recti parameters[gl_InstanceID * 11 + 0]
|
||||
#define rect parameters[gl_InstanceID * 11 + 1]
|
||||
#define radsi parameters[gl_InstanceID * 11 + 2].x
|
||||
#define rads parameters[gl_InstanceID * 11 + 2].y
|
||||
#define faci parameters[gl_InstanceID * 11 + 2].zw
|
||||
#define roundCorners parameters[gl_InstanceID * 11 + 3]
|
||||
#define colorInner1 parameters[gl_InstanceID * 11 + 4]
|
||||
#define colorInner2 parameters[gl_InstanceID * 11 + 5]
|
||||
#define colorEdge parameters[gl_InstanceID * 11 + 6]
|
||||
#define colorEmboss parameters[gl_InstanceID * 11 + 7]
|
||||
#define colorTria parameters[gl_InstanceID * 11 + 8]
|
||||
#define tria1Center parameters[gl_InstanceID * 11 + 9].xy
|
||||
#define tria2Center parameters[gl_InstanceID * 11 + 9].zw
|
||||
#define tria1Size parameters[gl_InstanceID * 11 + 10].x
|
||||
#define tria2Size parameters[gl_InstanceID * 11 + 10].y
|
||||
#define shadeDir parameters[gl_InstanceID * 11 + 10].z
|
||||
|
||||
in uint vflag;
|
||||
|
||||
|
|
Loading…
Reference in New Issue