diff options
author | Pasi Keränen <pasi.keranen@qt.io> | 2019-06-06 16:22:02 +0300 |
---|---|---|
committer | Pasi Keränen <pasi.keranen@qt.io> | 2019-06-07 13:52:44 +0300 |
commit | b4954701093739e7a4e54a0669f306922d0d4605 (patch) | |
tree | 73d71319a921234f6b507c9098fdc842f7fe06dc /res/effectlib/distancefieldtext_dropshadow.vert | |
parent | 8548a5f5579e3eee7e5ae6b1f6901dcc8bfee19e (diff) |
Long live the slayer!
Initial commit of OpenGL Runtime to repository.
Based on SHA1 61823aaccc6510699a54b34a2fe3f7523dab3b4e
of qt3dstudio repository.
Task-number: QT3DS-3600
Change-Id: Iaeb80237399f0e5656a19ebec9d1ab3a681d8832
Reviewed-by: Pasi Keränen <pasi.keranen@qt.io>
Diffstat (limited to 'res/effectlib/distancefieldtext_dropshadow.vert')
-rw-r--r-- | res/effectlib/distancefieldtext_dropshadow.vert | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/res/effectlib/distancefieldtext_dropshadow.vert b/res/effectlib/distancefieldtext_dropshadow.vert new file mode 100644 index 0000000..5939a8c --- /dev/null +++ b/res/effectlib/distancefieldtext_dropshadow.vert @@ -0,0 +1,88 @@ +#ifdef GL_OES_standard_derivatives +# extension GL_OES_standard_derivatives : enable +#else +# define use_fallback +#endif + +uniform highp mat4 mvp; +uniform highp float fontScale; +uniform int textureWidth; +uniform int textureHeight; +uniform highp vec2 shadowOffset; + +attribute highp vec3 vCoord; +attribute highp vec2 tCoord; +attribute highp vec4 textureBounds; + +varying highp vec2 sampleCoord; +varying highp vec2 shadowSampleCoord; +varying highp vec4 normalizedTextureBounds; + +#ifdef use_fallback +varying highp vec2 alphas; + +highp float thresholdFunc(highp float scale) +{ + highp float base = 0.5; + highp float baseDev = 0.065; + highp float devScaleMin = 0.15; + highp float devScaleMax = 0.3; + return base - ((clamp(scale, devScaleMin, devScaleMax) - devScaleMin) + / (devScaleMax - devScaleMin) * -baseDev + baseDev); +} + +highp float spreadFunc(highp float scale) +{ + return 0.06 / scale; +} + +highp vec2 alphaRange(highp float scale) +{ + highp float base = thresholdFunc(scale); + highp float range = spreadFunc(scale); + highp float alphaMin = max(0.0, base - range); + highp float alphaMax = min(base + range, 1.0); + return vec2(alphaMin, alphaMax); +} + +highp float determinantOfSubmatrix(highp mat4 m, int col0, int col1, int row0, int row1) +{ + return m[col0][row0] * m[col1][row1] - m[col0][row1] * m[col1][row0]; +} + +highp float determinantOfSubmatrix(highp mat4 m, int col0, int col1, int col2, + int row0, int row1, int row2) +{ + highp float det = m[col0][row0] * determinantOfSubmatrix(m, col1, col2, row1, row2); + det -= m[col1][row0] * determinantOfSubmatrix(m, col0, col2, row1, row2); + det += m[col2][row0] * determinantOfSubmatrix(m, col0, col1, row1, row2); + return det; +} + +highp float determinant(highp mat4 m) +{ + highp float det = m[0][0] * determinantOfSubmatrix(m, 1, 2, 3, 1, 2, 3); + det -= m[1][0] * determinantOfSubmatrix(m, 0, 2, 3, 1, 2, 3); + det += m[2][0] * determinantOfSubmatrix(m, 0, 1, 3, 1, 2, 3); + det -= m[3][0] * determinantOfSubmatrix(m, 0, 1, 2, 1, 2, 3); + return det; +} +#endif + +void main() +{ +#ifdef use_fallback + highp float scale = fontScale * pow(abs(determinant(mvp)), 1.0 / 3.0); + alphas = alphaRange(scale); +#endif + + highp vec2 textureSizeMultiplier = vec2(1.0 / float(textureWidth), + 1.0 / float(textureHeight)); + + sampleCoord = tCoord * textureSizeMultiplier; + shadowSampleCoord = (tCoord - shadowOffset) * textureSizeMultiplier; + normalizedTextureBounds = vec4(textureBounds.xy * textureSizeMultiplier, + textureBounds.zw * textureSizeMultiplier); + + gl_Position = mvp * vec4(vCoord, 1.0); +} |