diff options
Diffstat (limited to 'gsk/vulkan/resources/blendmode.vert')
-rw-r--r-- | gsk/vulkan/resources/blendmode.vert | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/gsk/vulkan/resources/blendmode.vert b/gsk/vulkan/resources/blendmode.vert new file mode 100644 index 0000000000..6670475ed8 --- /dev/null +++ b/gsk/vulkan/resources/blendmode.vert @@ -0,0 +1,40 @@ +#version 420 core + +#include "clip.vert.glsl" + +layout(location = 0) in vec4 inRect; +layout(location = 1) in vec4 inStartTexRect; +layout(location = 2) in vec4 inEndTexRect; +layout(location = 3) in uint inBlendMode; + +layout(location = 0) out vec2 outPos; +layout(location = 1) out vec2 outStartTexCoord; +layout(location = 2) out vec2 outEndTexCoord; +layout(location = 3) flat out uint outBlendMode; + +vec2 offsets[6] = { vec2(0.0, 0.0), + vec2(1.0, 0.0), + vec2(0.0, 1.0), + vec2(0.0, 1.0), + vec2(1.0, 0.0), + vec2(1.0, 1.0) }; + +void main() { + vec4 rect = clip (inRect); + vec2 pos = rect.xy + rect.zw * offsets[gl_VertexIndex]; + gl_Position = push.mvp * vec4 (pos, 0.0, 1.0); + + outPos = pos; + + vec4 texrect = vec4((rect.xy - inRect.xy) / inRect.zw, + rect.zw / inRect.zw); + vec4 starttexrect = vec4(inStartTexRect.xy + inStartTexRect.zw * texrect.xy, + inStartTexRect.zw * texrect.zw); + vec4 endtexrect = vec4(inEndTexRect.xy + inEndTexRect.zw * texrect.xy, + inEndTexRect.zw * texrect.zw); + + outStartTexCoord = starttexrect.xy + starttexrect.zw * offsets[gl_VertexIndex]; + outEndTexCoord = endtexrect.xy + endtexrect.zw * offsets[gl_VertexIndex]; + + outBlendMode = inBlendMode; +} |