summaryrefslogtreecommitdiffstats
path: root/src/extras
diff options
context:
space:
mode:
authorWieland Hagen <wieland.hagen@kdab.com>2017-07-06 17:53:40 +0200
committerSean Harmer <sean.harmer@kdab.com>2017-07-07 09:35:40 +0000
commitcadfd44c77de9ad3d66e936df140e4ba6efb0d74 (patch)
tree497b402e26fa578b1f444b52f6d191d134de7a6c /src/extras
parent29a6f78653c5b651590cbca98b5bc7e143c3747c (diff)
Apply slight z-offsets to distance field glyphs
When rendering distance field text, z-fighting may occur between adjacent glyphs. To prevent this, we apply a very slight Z offset to each rendered glyph. Change-Id: I19f9808267547ae9521757c6022b4f65c1ca4ba5 Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/extras')
-rw-r--r--src/extras/shaders/gl3/distancefieldtext.frag5
-rw-r--r--src/extras/shaders/gl3/distancefieldtext.vert8
-rw-r--r--src/extras/text/qtext2dentity.cpp8
3 files changed, 11 insertions, 10 deletions
diff --git a/src/extras/shaders/gl3/distancefieldtext.frag b/src/extras/shaders/gl3/distancefieldtext.frag
index 4f0c9cac0..c53f3df55 100644
--- a/src/extras/shaders/gl3/distancefieldtext.frag
+++ b/src/extras/shaders/gl3/distancefieldtext.frag
@@ -1,4 +1,4 @@
-#version 150 core
+#version 130
uniform sampler2D distanceFieldTexture;
uniform float minAlpha;
@@ -6,8 +6,8 @@ uniform float maxAlpha;
uniform float textureSize;
uniform vec4 color;
-in vec3 position;
in vec2 texCoord;
+in float zValue;
out vec4 fragColor;
@@ -35,4 +35,5 @@ void main()
float distVal = texture(distanceFieldTexture, texCoord).r;
fragColor = color * smoothstep(minAlpha, maxAlpha, distVal);
+ gl_FragDepth = gl_FragCoord.z - zValue * 0.00001;
}
diff --git a/src/extras/shaders/gl3/distancefieldtext.vert b/src/extras/shaders/gl3/distancefieldtext.vert
index 9bd2a0a90..74a48f426 100644
--- a/src/extras/shaders/gl3/distancefieldtext.vert
+++ b/src/extras/shaders/gl3/distancefieldtext.vert
@@ -1,10 +1,10 @@
-#version 150 core
+#version 130
in vec3 vertexPosition;
in vec2 vertexTexCoord;
-out vec3 position;
out vec2 texCoord;
+out float zValue;
uniform mat4 modelView;
uniform mat4 mvp;
@@ -12,8 +12,8 @@ uniform mat4 mvp;
void main()
{
texCoord = vertexTexCoord;
- position = vec3(modelView * vec4(vertexPosition, 1.0));
+ zValue = vertexPosition.z;
- gl_Position = mvp * vec4(vertexPosition, 1.0);
+ gl_Position = mvp * vec4(vertexPosition.xy, 0.0, 1.0);
}
diff --git a/src/extras/text/qtext2dentity.cpp b/src/extras/text/qtext2dentity.cpp
index dbd4368bc..1dfd171cd 100644
--- a/src/extras/text/qtext2dentity.cpp
+++ b/src/extras/text/qtext2dentity.cpp
@@ -209,10 +209,10 @@ void QText2DEntityPrivate::setCurrentGlyphRuns(const QVector<QGlyphRun> &runs)
texCoords.setWidth(texCoords.width() * insideRatio);
}
- data.vertex << x1 << y1 << 0.f << texCoords.left() << texCoords.bottom();
- data.vertex << x1 << y2 << 0.f << texCoords.left() << texCoords.top();
- data.vertex << x2 << y1 << 0.f << texCoords.right() << texCoords.bottom();
- data.vertex << x2 << y2 << 0.f << texCoords.right() << texCoords.top();
+ data.vertex << x1 << y1 << i << texCoords.left() << texCoords.bottom();
+ data.vertex << x1 << y2 << i << texCoords.left() << texCoords.top();
+ data.vertex << x2 << y1 << i << texCoords.right() << texCoords.bottom();
+ data.vertex << x2 << y2 << i << texCoords.right() << texCoords.top();
data.index << data.vertexCount << data.vertexCount+3 << data.vertexCount+1;
data.index << data.vertexCount << data.vertexCount+2 << data.vertexCount+3;