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:
Diffstat (limited to 'source/blender/gpu/shaders/gpu_shader_2D_widget_shadow_vert.glsl')
-rw-r--r--source/blender/gpu/shaders/gpu_shader_2D_widget_shadow_vert.glsl88
1 files changed, 59 insertions, 29 deletions
diff --git a/source/blender/gpu/shaders/gpu_shader_2D_widget_shadow_vert.glsl b/source/blender/gpu/shaders/gpu_shader_2D_widget_shadow_vert.glsl
index f6be496ac4f..99f80f6a7f2 100644
--- a/source/blender/gpu/shaders/gpu_shader_2D_widget_shadow_vert.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_2D_widget_shadow_vert.glsl
@@ -12,23 +12,53 @@
/* 4bits for corner id */
#define CORNER_VEC_OFS 2u
#define CORNER_VEC_RANGE BIT_RANGE(4)
-const vec2 cornervec[36] = vec2[36](
- vec2(0.0, 1.0), vec2(0.02, 0.805), vec2(0.067, 0.617), vec2(0.169, 0.45), vec2(0.293, 0.293), vec2(0.45, 0.169), vec2(0.617, 0.076), vec2(0.805, 0.02), vec2(1.0, 0.0),
- vec2(-1.0, 0.0), vec2(-0.805, 0.02), vec2(-0.617, 0.067), vec2(-0.45, 0.169), vec2(-0.293, 0.293), vec2(-0.169, 0.45), vec2(-0.076, 0.617), vec2(-0.02, 0.805), vec2(0.0, 1.0),
- vec2(0.0, -1.0), vec2(-0.02, -0.805), vec2(-0.067, -0.617), vec2(-0.169, -0.45), vec2(-0.293, -0.293), vec2(-0.45, -0.169), vec2(-0.617, -0.076), vec2(-0.805, -0.02), vec2(-1.0, 0.0),
- vec2(1.0, 0.0), vec2(0.805, -0.02), vec2(0.617, -0.067), vec2(0.45, -0.169), vec2(0.293, -0.293), vec2(0.169, -0.45), vec2(0.076, -0.617), vec2(0.02, -0.805), vec2(0.0, -1.0)
-);
+const vec2 cornervec[36] = vec2[36](vec2(0.0, 1.0),
+ vec2(0.02, 0.805),
+ vec2(0.067, 0.617),
+ vec2(0.169, 0.45),
+ vec2(0.293, 0.293),
+ vec2(0.45, 0.169),
+ vec2(0.617, 0.076),
+ vec2(0.805, 0.02),
+ vec2(1.0, 0.0),
+ vec2(-1.0, 0.0),
+ vec2(-0.805, 0.02),
+ vec2(-0.617, 0.067),
+ vec2(-0.45, 0.169),
+ vec2(-0.293, 0.293),
+ vec2(-0.169, 0.45),
+ vec2(-0.076, 0.617),
+ vec2(-0.02, 0.805),
+ vec2(0.0, 1.0),
+ vec2(0.0, -1.0),
+ vec2(-0.02, -0.805),
+ vec2(-0.067, -0.617),
+ vec2(-0.169, -0.45),
+ vec2(-0.293, -0.293),
+ vec2(-0.45, -0.169),
+ vec2(-0.617, -0.076),
+ vec2(-0.805, -0.02),
+ vec2(-1.0, 0.0),
+ vec2(1.0, 0.0),
+ vec2(0.805, -0.02),
+ vec2(0.617, -0.067),
+ vec2(0.45, -0.169),
+ vec2(0.293, -0.293),
+ vec2(0.169, -0.45),
+ vec2(0.076, -0.617),
+ vec2(0.02, -0.805),
+ vec2(0.0, -1.0));
-#define INNER_FLAG uint(1 << 10) /* is inner vert */
+#define INNER_FLAG uint(1 << 10) /* is inner vert */
uniform mat4 ModelViewProjectionMatrix;
uniform vec4 parameters[4];
/* radi and rad per corner */
-#define recti parameters[0]
-#define rect parameters[1]
-#define radsi parameters[2].x
-#define rads parameters[2].y
+#define recti parameters[0]
+#define rect parameters[1]
+#define radsi parameters[2].x
+#define rads parameters[2].y
#define roundCorners parameters[3]
in uint vflag;
@@ -37,28 +67,28 @@ out float shadowFalloff;
void main()
{
- uint cflag = vflag & CNR_FLAG_RANGE;
- uint vofs = (vflag >> CORNER_VEC_OFS) & CORNER_VEC_RANGE;
+ uint cflag = vflag & CNR_FLAG_RANGE;
+ uint vofs = (vflag >> CORNER_VEC_OFS) & CORNER_VEC_RANGE;
- vec2 v = cornervec[cflag * 9u + vofs];
+ vec2 v = cornervec[cflag * 9u + vofs];
- bool is_inner = (vflag & INNER_FLAG) != 0u;
+ bool is_inner = (vflag & INNER_FLAG) != 0u;
- shadowFalloff = (is_inner) ? 1.0 : 0.0;
+ shadowFalloff = (is_inner) ? 1.0 : 0.0;
- /* Scale by corner radius */
- v *= roundCorners[cflag] * ((is_inner) ? radsi : rads);
+ /* Scale by corner radius */
+ v *= roundCorners[cflag] * ((is_inner) ? radsi : rads);
- /* Position to corner */
- vec4 rct = (is_inner) ? recti : rect;
- if (cflag == BOTTOM_LEFT)
- v += rct.xz;
- else if (cflag == BOTTOM_RIGHT)
- v += rct.yz;
- else if (cflag == TOP_RIGHT)
- v += rct.yw;
- else /* (cflag == TOP_LEFT) */
- v += rct.xw;
+ /* Position to corner */
+ vec4 rct = (is_inner) ? recti : rect;
+ if (cflag == BOTTOM_LEFT)
+ v += rct.xz;
+ else if (cflag == BOTTOM_RIGHT)
+ v += rct.yz;
+ else if (cflag == TOP_RIGHT)
+ v += rct.yw;
+ else /* (cflag == TOP_LEFT) */
+ v += rct.xw;
- gl_Position = ModelViewProjectionMatrix * vec4(v, 0.0, 1.0);
+ gl_Position = ModelViewProjectionMatrix * vec4(v, 0.0, 1.0);
}