Fix T81169: Grease Pencil Z-depth drawing issue on OSX + AMD Graphic Cards

The grease pencil merge depth shader is designed to only work correctly
in octographic mode. The uv coordinates used `noperspective` attribute.
Somehow this doesn't lead to render artifacts on most platforms and was
only detected on OSX + AMD cards.

This fix would calculate the uv coordinate inside the fragment shader
and isn't passed along from the vertex shader.

Thanks to Sebastián Barschkis for providing the hardware and time and
Clément Foucault for helping out with the final fix.
This commit is contained in:
Jeroen Bakker 2021-01-29 15:19:01 +01:00
parent 9f89166b52
commit cacc1d723c
Notes: blender-bot 2023-02-13 23:17:13 +01:00
Referenced by issue #81169, Grease Pencil Z-depth drawing issue on OSX + AMD Graphic Cards
2 changed files with 1 additions and 7 deletions

View File

@ -1,13 +1,10 @@
uniform sampler2D depthBuf;
uniform float strokeDepth2d;
uniform bool strokeOrder3d;
noperspective in vec4 uvcoordsvar;
void main()
{
float depth = textureLod(depthBuf, uvcoordsvar.xy, 0).r;
float depth = textureLod(depthBuf, gl_FragCoord.xy / vec2(textureSize(depthBuf, 0)), 0).r;
if (strokeOrder3d) {
gl_FragDepth = depth;
}

View File

@ -1,8 +1,6 @@
uniform vec4 gpModelMatrix[4];
noperspective out vec4 uvcoordsvar;
void main()
{
mat4 model_matrix = mat4(gpModelMatrix[0], gpModelMatrix[1], gpModelMatrix[2], gpModelMatrix[3]);
@ -10,5 +8,4 @@ void main()
float x = -1.0 + float((v & 1) << 2);
float y = -1.0 + float((v & 2) << 1);
gl_Position = ViewProjectionMatrix * (model_matrix * vec4(x, y, 0.0, 1.0));
uvcoordsvar = vec4((gl_Position.xy / gl_Position.w + 1.0) * 0.5, 0.0, 0.0);
}