Changeset View
Changeset View
Standalone View
Standalone View
source/blender/gpu/shaders/gpu_shader_text_frag.glsl
| #pragma BLENDER_REQUIRE(gpu_shader_colorspace_lib.glsl) | #pragma BLENDER_REQUIRE(gpu_shader_colorspace_lib.glsl) | ||||
| const vec2 offsets4[4] = vec2[4]( | |||||
| vec2(-0.5, 0.5), vec2(0.5, 0.5), vec2(-0.5, -0.5), vec2(-0.5, -0.5)); | |||||
| const vec2 offsets16[16] = vec2[16](vec2(-1.5, 1.5), | |||||
| vec2(-0.5, 1.5), | |||||
| vec2(0.5, 1.5), | |||||
| vec2(1.5, 1.5), | |||||
| vec2(-1.5, 0.5), | |||||
| vec2(-0.5, 0.5), | |||||
| vec2(0.5, 0.5), | |||||
| vec2(1.5, 0.5), | |||||
| vec2(-1.5, -0.5), | |||||
| vec2(-0.5, -0.5), | |||||
| vec2(0.5, -0.5), | |||||
| vec2(1.5, -0.5), | |||||
| vec2(-1.5, -1.5), | |||||
| vec2(-0.5, -1.5), | |||||
| vec2(0.5, -1.5), | |||||
| vec2(1.5, -1.5)); | |||||
| //#define GPU_NEAREST | //#define GPU_NEAREST | ||||
| #define sample_glyph_offset(texel, ofs) \ | #define sample_glyph_offset(texel, ofs) \ | ||||
| texture_1D_custom_bilinear_filter(texCoord_interp + ofs * texel) | texture_1D_custom_bilinear_filter(texCoord_interp + ofs * texel) | ||||
| float texel_fetch(int index) | float texel_fetch(int index) | ||||
| { | { | ||||
| int size_x = textureSize(glyph, 0).r; | int size_x = textureSize(glyph, 0).r; | ||||
| if (index >= size_x) { | if (index >= size_x) { | ||||
| ▲ Show 20 Lines • Show All 56 Lines • ▼ Show 20 Lines | void main() | ||||
| if (interp_size == 0) { | if (interp_size == 0) { | ||||
| fragColor.a = texture_1D_custom_bilinear_filter(texCoord_interp); | fragColor.a = texture_1D_custom_bilinear_filter(texCoord_interp); | ||||
| } | } | ||||
| else { | else { | ||||
| vec2 texel = 1.0 / vec2(glyph_dim); | vec2 texel = 1.0 / vec2(glyph_dim); | ||||
| fragColor.a = 0.0; | fragColor.a = 0.0; | ||||
| if (interp_size == 1) { | if (interp_size == 1) { | ||||
| /* NOTE(Metal): Declaring constant array in function scope to avoid increasing local shader | |||||
| * memory pressure.*/ | |||||
| const vec2 offsets4[4] = vec2[4]( | |||||
| vec2(-0.5, 0.5), vec2(0.5, 0.5), vec2(-0.5, -0.5), vec2(-0.5, -0.5)); | |||||
| /* 3x3 blur */ | /* 3x3 blur */ | ||||
| /* Manual unroll for perf. (stupid glsl compiler) */ | /* Manual unroll for perf. (stupid glsl compiler) */ | ||||
| fragColor.a += sample_glyph_offset(texel, offsets4[0]); | fragColor.a += sample_glyph_offset(texel, offsets4[0]); | ||||
| fragColor.a += sample_glyph_offset(texel, offsets4[1]); | fragColor.a += sample_glyph_offset(texel, offsets4[1]); | ||||
| fragColor.a += sample_glyph_offset(texel, offsets4[2]); | fragColor.a += sample_glyph_offset(texel, offsets4[2]); | ||||
| fragColor.a += sample_glyph_offset(texel, offsets4[3]); | fragColor.a += sample_glyph_offset(texel, offsets4[3]); | ||||
| fragColor.a *= (1.0 / 4.0); | fragColor.a *= (1.0 / 4.0); | ||||
| } | } | ||||
| else { | else { | ||||
| /* NOTE(Metal): Declaring constant array in function scope to avoid increasing local shader | |||||
| * memory pressure.*/ | |||||
| const vec2 offsets16[16] = vec2[16](vec2(-1.5, 1.5), | |||||
| vec2(-0.5, 1.5), | |||||
| vec2(0.5, 1.5), | |||||
| vec2(1.5, 1.5), | |||||
| vec2(-1.5, 0.5), | |||||
| vec2(-0.5, 0.5), | |||||
| vec2(0.5, 0.5), | |||||
| vec2(1.5, 0.5), | |||||
| vec2(-1.5, -0.5), | |||||
| vec2(-0.5, -0.5), | |||||
| vec2(0.5, -0.5), | |||||
| vec2(1.5, -0.5), | |||||
| vec2(-1.5, -1.5), | |||||
| vec2(-0.5, -1.5), | |||||
| vec2(0.5, -1.5), | |||||
| vec2(1.5, -1.5)); | |||||
| /* 5x5 blur */ | /* 5x5 blur */ | ||||
| /* Manual unroll for perf. (stupid glsl compiler) */ | /* Manual unroll for perf. (stupid glsl compiler) */ | ||||
| fragColor.a += sample_glyph_offset(texel, offsets16[0]); | fragColor.a += sample_glyph_offset(texel, offsets16[0]); | ||||
| fragColor.a += sample_glyph_offset(texel, offsets16[1]); | fragColor.a += sample_glyph_offset(texel, offsets16[1]); | ||||
| fragColor.a += sample_glyph_offset(texel, offsets16[2]); | fragColor.a += sample_glyph_offset(texel, offsets16[2]); | ||||
| fragColor.a += sample_glyph_offset(texel, offsets16[3]); | fragColor.a += sample_glyph_offset(texel, offsets16[3]); | ||||
| fragColor.a += sample_glyph_offset(texel, offsets16[4]); | fragColor.a += sample_glyph_offset(texel, offsets16[4]); | ||||
| Show All 20 Lines | |||||