diff --git a/src/osgText/shaders/text_sdf_frag.cpp b/src/osgText/shaders/text_sdf_frag.cpp index fa2ed3c10..90bd739ab 100644 --- a/src/osgText/shaders/text_sdf_frag.cpp +++ b/src/osgText/shaders/text_sdf_frag.cpp @@ -9,9 +9,18 @@ char text_sdf_frag[] = "$OSG_GLSL_VERSION\n" " #endif\n" "#endif\n" "\n" - "$OSG_PRECISION_FLOAT\n" + "#if !defined(GL_ES)\n" + " #if __VERSION__>=400\n" + " #define osg_TextureQueryLOD textureQueryLod\n" + " #else\n" + " #extension GL_ARB_texture_query_lod : enable\n" + " #ifdef GL_ARB_texture_query_lod\n" + " #define osg_TextureQueryLOD textureQueryLOD\n" + " #endif\n" + " #endif\n" + "#endif\n" "\n" - "#undef SIGNED_DISTNACE_FIELD\n" + "$OSG_PRECISION_FLOAT\n" "\n" "#if __VERSION__>=130\n" " #define TEXTURE texture\n" @@ -28,6 +37,14 @@ char text_sdf_frag[] = "$OSG_GLSL_VERSION\n" "$OSG_VARYING_IN vec2 texCoord;\n" "$OSG_VARYING_IN vec4 vertexColor;\n" "\n" + "#ifndef TEXTURE_DIMENSION\n" + "const float TEXTURE_DIMENSION = 1024.0;\n" + "#endif\n" + "\n" + "#ifndef GLYPH_DIMENSION\n" + "const float GLYPH_DIMENSION = 32.0;\n" + "#endif\n" + "\n" "#ifdef SIGNED_DISTNACE_FIELD\n" "\n" "float distanceFromEdge(vec2 tc)\n" @@ -88,13 +105,6 @@ char text_sdf_frag[] = "$OSG_GLSL_VERSION\n" " vec2 dx = dFdx(texCoord)*sample_distance_scale;\n" " vec2 dy = dFdy(texCoord)*sample_distance_scale;\n" "\n" - " #ifndef TEXTURE_DIMENSION\n" - " float TEXTURE_DIMENSION = 1024.0;\n" - " #endif\n" - "\n" - " #ifndef GLYPH_DIMENSION\n" - " float GLYPH_DIMENSION = 32.0;\n" - " #endif\n" "\n" " float distance_across_pixel = length(dx+dy)*(TEXTURE_DIMENSION/GLYPH_DIMENSION);\n" "\n" @@ -151,26 +161,57 @@ char text_sdf_frag[] = "$OSG_GLSL_VERSION\n" "\n" " return total_color;\n" "}\n" + "\n" "#else\n" "\n" "vec4 textureColor()\n" "{\n" - " #ifdef OUTLINE\n" - " // glyph.rgba = (signed_distance, thin_outline, thick_outline, glyph_alpha)\n" - " vec4 glyph = TEXTURE(glyphTexture, texCoord);\n" + " float alpha = TEXTURE(glyphTexture, texCoord).a;\n" "\n" - " float outline_alpha = (OUTLINE<=0.05) ? glyph.g : glyph.b;\n" + "#ifdef OUTLINE\n" "\n" - " float alpha = glyph.a+outline_alpha;\n" - " if (alpha>1.0) alpha = 1.0;\n" + " float delta_tc = 1.6*OUTLINE*GLYPH_DIMENSION/TEXTURE_DIMENSION;\n" "\n" - " return vec4( vertexColor.rgb*glyph.a + BACKDROP_COLOR.rgb*outline_alpha, alpha);\n" + " float outline_alpha = alpha;\n" + " vec2 origin = texCoord-vec2(delta_tc*0.5, delta_tc*0.5);\n" "\n" - " #else\n" - " float alpha = TEXTURE(glyphTexture, texCoord).a;\n" - " if (alpha==0.0) vec4(0.0, 0.0, 0.0, 0.0);\n" - " return vec4(vertexColor.rgb, alpha);\n" + " float numSamples = 3.0;\n" + " delta_tc = delta_tc/(numSamples-1);\n" + "\n" + " float background_alpha = 1.0;\n" + "\n" + " for(float i=0.0; i1.0) outline_alpha = 1.0;\n" + "\n" + " if (outline_alpha==0.0) return vec4(0.0, 0.0, 0.0, 0.0); // outside glyph and outline\n" + "\n" + " vec4 color = mix(BACKDROP_COLOR, vertexColor, smoothstep(0.0, 1.0, alpha));\n" + " color.a = smoothstep(0.0, 1.0, outline_alpha);\n" + "\n" + " return color;\n" + "\n" + "#else\n" + " if (alpha==0.0) vec4(0.0, 0.0, 0.0, 0.0);\n" + " return vec4(vertexColor.rgb, vertexColor.a * alpha);\n" + "#endif\n" "}\n" "\n" "#endif\n"