Revision control

Copy as Markdown

// Copyright (C) 2025 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#version 440
layout(location = 0) in vec4 vertexCoord;
layout(location = 1) in vec3 vertexBarycentric;
layout(location = 2) in vec3 normalExt; // x and y: normal vector; z: strokeWidth multiplier (default 1)
layout(location = 0) out vec3 barycentric;
layout(std140, binding = 0) uniform buf {
#if QSHADER_VIEW_COUNT >= 2
mat4 qt_Matrix[QSHADER_VIEW_COUNT];
#else
mat4 qt_Matrix;
#endif
float matrixScale;
float opacity;
float devicePixelRatio;
float strokeWidth;
vec4 strokeColor;
float debug;
float reserved5;
float reserved6;
float reserved7;
} ubuf;
#define SQRT2 1.41421356237
void main()
{
// the subset of calculations from shapestroke.vert necessary to get gl_Position
vec4 normalV = vec4(normalExt.xy, 0.0, 0.0);
vec4 P = vertexCoord // center of stroke
+ normalV * abs(ubuf.strokeWidth) // expand to stroke width
+ normalV * SQRT2/ubuf.matrixScale; // AA
if (ubuf.strokeWidth < 0.) {
float adjStrokeWidth = abs(ubuf.strokeWidth) * ubuf.devicePixelRatio / ubuf.matrixScale;
float strokeDiff = max(ubuf.devicePixelRatio / ubuf.matrixScale, adjStrokeWidth) *
(ubuf.matrixScale / ubuf.devicePixelRatio - 1) / 2.;
P -= normalV * strokeDiff; // cosmetic adjustment
}
barycentric = vertexBarycentric;
#if QSHADER_VIEW_COUNT >= 2
gl_Position = ubuf.qt_Matrix[gl_ViewIndex] * P;
#else
gl_Position = ubuf.qt_Matrix * P;
#endif
}