[Bf-blender-cvs] [291f9462fc6] tmp-widget-opti: UI: Widgets: Reduce constants count in shader

Clément Foucault noreply at git.blender.org
Mon May 25 11:45:56 CEST 2020


Commit: 291f9462fc61d10daf1e61a7d334aab914a44a11
Author: Clément Foucault
Date:   Fri May 15 15:21:02 2020 +0200
Branches: tmp-widget-opti
https://developer.blender.org/rB291f9462fc61d10daf1e61a7d334aab914a44a11

UI: Widgets: Reduce constants count in shader

===================================================================

M	source/blender/gpu/shaders/gpu_shader_2D_widget_base_vert.glsl

===================================================================

diff --git a/source/blender/gpu/shaders/gpu_shader_2D_widget_base_vert.glsl b/source/blender/gpu/shaders/gpu_shader_2D_widget_base_vert.glsl
index 0b2bc08944e..8008582482d 100644
--- a/source/blender/gpu/shaders/gpu_shader_2D_widget_base_vert.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_2D_widget_base_vert.glsl
@@ -12,42 +12,15 @@
 /* 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[9] = vec2[9](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));
 
 /* 4bits for jitter id */
 #define JIT_OFS 6u
@@ -189,26 +162,26 @@ vec2 do_widget(void)
 {
   uint cflag = vflag & CNR_FLAG_RANGE;
   uint vofs = (vflag >> CORNER_VEC_OFS) & CORNER_VEC_RANGE;
-
-  vec2 v = cornervec[cflag * 9u + vofs];
-
   bool is_inner = (vflag & INNER_FLAG) != 0u;
 
+  vec2 v = cornervec[vofs];
   /* Scale by corner radius */
   v *= roundCorners[cflag] * ((is_inner) ? radsi : rads);
-
-  /* Position to corner */
+  /* Flip in the right direction and osition to corner */
   vec4 rct = (is_inner) ? recti : rect;
   if (cflag == BOTTOM_LEFT) {
     v += rct.xz;
   }
   else if (cflag == BOTTOM_RIGHT) {
+    v = vec2(-v.y, v.x);
     v += rct.yz;
   }
   else if (cflag == TOP_RIGHT) {
+    v = -v;
     v += rct.yw;
   }
   else /* (cflag == TOP_LEFT) */ {
+    v = vec2(v.y, -v.x);
     v += rct.xw;
   }



More information about the Bf-blender-cvs mailing list