Changeset View
Changeset View
Standalone View
Standalone View
source/blender/gpu/shaders/gpu_shader_2D_widget_shadow_vert.glsl
| #define BIT_RANGE(x) uint((1 << x) - 1) | #define BIT_RANGE(x) uint((1 << x) - 1) | ||||
| /* 2 bits for corner */ | /* 2 bits for corner */ | ||||
| /* Attention! Not the same order as in UI_interface.h! | /* Attention! Not the same order as in UI_interface.h! | ||||
| * Ordered by drawing order. */ | * Ordered by drawing order. */ | ||||
| #define BOTTOM_LEFT 0u | #define BOTTOM_LEFT 0u | ||||
| #define BOTTOM_RIGHT 1u | #define BOTTOM_RIGHT 1u | ||||
| #define TOP_RIGHT 2u | #define TOP_RIGHT 2u | ||||
| #define TOP_LEFT 3u | #define TOP_LEFT 3u | ||||
| #define CNR_FLAG_RANGE BIT_RANGE(2) | #define CNR_FLAG_RANGE BIT_RANGE(2) | ||||
| /* 4bits for corner id */ | /* 4bits for corner id */ | ||||
| #define CORNER_VEC_OFS 2u | #define CORNER_VEC_OFS 2u | ||||
| #define CORNER_VEC_RANGE BIT_RANGE(4) | #define CORNER_VEC_RANGE BIT_RANGE(4) | ||||
| #define INNER_FLAG uint(1 << 10) /* is inner vert */ | |||||
| /* radi and rad per corner */ | |||||
| #define recti parameters[0] | |||||
| #define rect parameters[1] | |||||
| #define radsi parameters[2].x | |||||
| #define rads parameters[2].y | |||||
| #define roundCorners parameters[3] | |||||
| void main() | |||||
| { | |||||
| /* NOTE(Metal): Declaring constant array in function scope to avoid increasing local shader | |||||
| * memory pressure.*/ | |||||
| const vec2 cornervec[36] = vec2[36](vec2(0.0, 1.0), | const vec2 cornervec[36] = vec2[36](vec2(0.0, 1.0), | ||||
| vec2(0.02, 0.805), | vec2(0.02, 0.805), | ||||
| vec2(0.067, 0.617), | vec2(0.067, 0.617), | ||||
| vec2(0.169, 0.45), | vec2(0.169, 0.45), | ||||
| vec2(0.293, 0.293), | vec2(0.293, 0.293), | ||||
| vec2(0.45, 0.169), | vec2(0.45, 0.169), | ||||
| vec2(0.617, 0.076), | vec2(0.617, 0.076), | ||||
| vec2(0.805, 0.02), | vec2(0.805, 0.02), | ||||
| vec2(1.0, 0.0), | vec2(1.0, 0.0), | ||||
| vec2(-1.0, 0.0), | vec2(-1.0, 0.0), | ||||
| vec2(-0.805, 0.02), | vec2(-0.805, 0.02), | ||||
| vec2(-0.617, 0.067), | vec2(-0.617, 0.067), | ||||
| vec2(-0.45, 0.169), | vec2(-0.45, 0.169), | ||||
| vec2(-0.293, 0.293), | vec2(-0.293, 0.293), | ||||
| vec2(-0.169, 0.45), | vec2(-0.169, 0.45), | ||||
| vec2(-0.076, 0.617), | vec2(-0.076, 0.617), | ||||
| vec2(-0.02, 0.805), | vec2(-0.02, 0.805), | ||||
| vec2(0.0, 1.0), | vec2(0.0, 1.0), | ||||
| vec2(0.0, -1.0), | vec2(0.0, -1.0), | ||||
| vec2(-0.02, -0.805), | vec2(-0.02, -0.805), | ||||
| vec2(-0.067, -0.617), | vec2(-0.067, -0.617), | ||||
| vec2(-0.169, -0.45), | vec2(-0.169, -0.45), | ||||
| vec2(-0.293, -0.293), | vec2(-0.293, -0.293), | ||||
| vec2(-0.45, -0.169), | vec2(-0.45, -0.169), | ||||
| vec2(-0.617, -0.076), | vec2(-0.617, -0.076), | ||||
| vec2(-0.805, -0.02), | vec2(-0.805, -0.02), | ||||
| vec2(-1.0, 0.0), | vec2(-1.0, 0.0), | ||||
| vec2(1.0, 0.0), | vec2(1.0, 0.0), | ||||
| vec2(0.805, -0.02), | vec2(0.805, -0.02), | ||||
| vec2(0.617, -0.067), | vec2(0.617, -0.067), | ||||
| vec2(0.45, -0.169), | vec2(0.45, -0.169), | ||||
| vec2(0.293, -0.293), | vec2(0.293, -0.293), | ||||
| vec2(0.169, -0.45), | vec2(0.169, -0.45), | ||||
| vec2(0.076, -0.617), | vec2(0.076, -0.617), | ||||
| vec2(0.02, -0.805), | vec2(0.02, -0.805), | ||||
| vec2(0.0, -1.0)); | vec2(0.0, -1.0)); | ||||
| #define INNER_FLAG uint(1 << 10) /* is inner vert */ | |||||
| /* radi and rad per corner */ | |||||
| #define recti parameters[0] | |||||
| #define rect parameters[1] | |||||
| #define radsi parameters[2].x | |||||
| #define rads parameters[2].y | |||||
| #define roundCorners parameters[3] | |||||
| void main() | |||||
| { | |||||
| uint cflag = vflag & CNR_FLAG_RANGE; | uint cflag = vflag & CNR_FLAG_RANGE; | ||||
| uint vofs = (vflag >> CORNER_VEC_OFS) & CORNER_VEC_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; | ||||
| Show All 21 Lines | |||||