diff options
Diffstat (limited to 'source/blender/draw/engines/workbench/shaders/workbench_shadow_caps_geom.glsl')
-rw-r--r-- | source/blender/draw/engines/workbench/shaders/workbench_shadow_caps_geom.glsl | 74 |
1 files changed, 41 insertions, 33 deletions
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_shadow_caps_geom.glsl b/source/blender/draw/engines/workbench/shaders/workbench_shadow_caps_geom.glsl index d8c8f22ed1c..09bafb8ff11 100644 --- a/source/blender/draw/engines/workbench/shaders/workbench_shadow_caps_geom.glsl +++ b/source/blender/draw/engines/workbench/shaders/workbench_shadow_caps_geom.glsl @@ -1,7 +1,7 @@ #extension GL_ARB_gpu_shader5 : enable #ifdef GL_ARB_gpu_shader5 -#define USE_INVOC_EXT +# define USE_INVOC_EXT #endif #ifdef DOUBLE_MANIFOLD @@ -28,58 +28,66 @@ layout(triangle_strip, max_vertices = vert_len) out; uniform vec3 lightDirection = vec3(0.57, 0.57, -0.57); -in VertexData { - vec3 pos; /* local position */ - vec4 frontPosition; /* final ndc position */ - vec4 backPosition; -} vData[]; +in VertexData +{ + vec3 pos; /* local position */ + vec4 frontPosition; /* final ndc position */ + vec4 backPosition; +} +vData[]; vec4 get_pos(int v, bool backface) { - return (backface) ? vData[v].backPosition : vData[v].frontPosition; + return (backface) ? vData[v].backPosition : vData[v].frontPosition; } void emit_cap(const bool front, bool reversed) { - if (front) { - gl_Position = vData[0].frontPosition; EmitVertex(); - gl_Position = vData[reversed ? 2 : 1].frontPosition; EmitVertex(); - gl_Position = vData[reversed ? 1 : 2].frontPosition; EmitVertex(); - } - else { - gl_Position = vData[0].backPosition; EmitVertex(); - gl_Position = vData[reversed ? 1 : 2].backPosition; EmitVertex(); - gl_Position = vData[reversed ? 2 : 1].backPosition; EmitVertex(); - } - EndPrimitive(); + if (front) { + gl_Position = vData[0].frontPosition; + EmitVertex(); + gl_Position = vData[reversed ? 2 : 1].frontPosition; + EmitVertex(); + gl_Position = vData[reversed ? 1 : 2].frontPosition; + EmitVertex(); + } + else { + gl_Position = vData[0].backPosition; + EmitVertex(); + gl_Position = vData[reversed ? 1 : 2].backPosition; + EmitVertex(); + gl_Position = vData[reversed ? 2 : 1].backPosition; + EmitVertex(); + } + EndPrimitive(); } void main() { - vec3 v10 = vData[0].pos - vData[1].pos; - vec3 v12 = vData[2].pos - vData[1].pos; + vec3 v10 = vData[0].pos - vData[1].pos; + vec3 v12 = vData[2].pos - vData[1].pos; - vec3 n = cross(v12, v10); - float facing = dot(n, lightDirection); + vec3 n = cross(v12, v10); + float facing = dot(n, lightDirection); - bool backface = facing > 0.0; + bool backface = facing > 0.0; #ifdef DOUBLE_MANIFOLD - /* In case of non manifold geom, we only increase/decrease - * the stencil buffer by one but do every faces as they were facing the light. */ - bool invert = backface; + /* In case of non manifold geom, we only increase/decrease + * the stencil buffer by one but do every faces as they were facing the light. */ + bool invert = backface; #else - const bool invert = false; - if (!backface) { + const bool invert = false; + if (!backface) { #endif #ifdef USE_INVOC_EXT - bool do_front = (gl_InvocationID & 1) == 0; - emit_cap(do_front, invert); + bool do_front = (gl_InvocationID & 1) == 0; + emit_cap(do_front, invert); #else - emit_cap(true, invert); - emit_cap(false, invert); + emit_cap(true, invert); + emit_cap(false, invert); #endif #ifndef DOUBLE_MANIFOLD - } +} #endif } |