diff options
author | Wieland Hagen <wieland.hagen@kdab.com> | 2017-07-06 17:53:40 +0200 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2017-07-07 09:35:40 +0000 |
commit | cadfd44c77de9ad3d66e936df140e4ba6efb0d74 (patch) | |
tree | 497b402e26fa578b1f444b52f6d191d134de7a6c /src/extras | |
parent | 29a6f78653c5b651590cbca98b5bc7e143c3747c (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.frag | 5 | ||||
-rw-r--r-- | src/extras/shaders/gl3/distancefieldtext.vert | 8 | ||||
-rw-r--r-- | src/extras/text/qtext2dentity.cpp | 8 |
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; |