diff options
Diffstat (limited to 'src/quick/scenegraph/shaders_ng/smoothcolor.vert')
-rw-r--r-- | src/quick/scenegraph/shaders_ng/smoothcolor.vert | 28 |
1 files changed, 19 insertions, 9 deletions
diff --git a/src/quick/scenegraph/shaders_ng/smoothcolor.vert b/src/quick/scenegraph/shaders_ng/smoothcolor.vert index 03a3ff8975..6ec10a7e70 100644 --- a/src/quick/scenegraph/shaders_ng/smoothcolor.vert +++ b/src/quick/scenegraph/shaders_ng/smoothcolor.vert @@ -7,22 +7,32 @@ layout(location = 2) in vec4 vertexOffset; layout(location = 0) out vec4 color; layout(std140, binding = 0) uniform buf { +#if QSHADER_VIEW_COUNT >= 2 + mat4 matrix[QSHADER_VIEW_COUNT]; +#else mat4 matrix; +#endif vec2 pixelSize; float opacity; -} ubuf; - -out gl_PerVertex { vec4 gl_Position; }; +}; void main() { - vec4 pos = ubuf.matrix * vertex; +#if QSHADER_VIEW_COUNT >= 2 + vec4 pos = matrix[gl_ViewIndex] * vertex; + vec4 m0 = matrix[gl_ViewIndex][0]; + vec4 m1 = matrix[gl_ViewIndex][1]; +#else + vec4 pos = matrix * vertex; + vec4 m0 = matrix[0]; + vec4 m1 = matrix[1]; +#endif gl_Position = pos; if (vertexOffset.x != 0.) { - vec4 delta = ubuf.matrix[0] * vertexOffset.x; + vec4 delta = m0 * vertexOffset.x; vec2 dir = delta.xy * pos.w - pos.xy * delta.w; - vec2 ndir = .5 * ubuf.pixelSize * normalize(dir / ubuf.pixelSize); + vec2 ndir = .5 * pixelSize * normalize(dir / pixelSize); dir -= ndir * delta.w * pos.w; float numerator = dot(dir, ndir * pos.w * pos.w); float scale = 0.0; @@ -34,9 +44,9 @@ void main() } if (vertexOffset.y != 0.) { - vec4 delta = ubuf.matrix[1] * vertexOffset.y; + vec4 delta = m1 * vertexOffset.y; vec2 dir = delta.xy * pos.w - pos.xy * delta.w; - vec2 ndir = .5 * ubuf.pixelSize * normalize(dir / ubuf.pixelSize); + vec2 ndir = .5 * pixelSize * normalize(dir / pixelSize); dir -= ndir * delta.w * pos.w; float numerator = dot(dir, ndir * pos.w * pos.w); float scale = 0.0; @@ -47,5 +57,5 @@ void main() gl_Position += scale * delta; } - color = vertexColor * ubuf.opacity; + color = vertexColor * opacity; } |