[require] GLSL >= 1.40 [fragment shader] #version 140 #extension GL_KHR_blend_equation_advanced : require out vec4 sk_FragColor; layout (blend_support_all_equations) out ; uniform vec4 urectUniform_Stage1; uniform vec4 uboundsUniform_Stage2; uniform float uxInvZoom_Stage2; uniform float uyInvZoom_Stage2; uniform float uxInvInset_Stage2; uniform float uyInvInset_Stage2; uniform vec2 uoffset_Stage2; uniform vec2 uImageIncrement_Stage3; uniform vec2 uBounds_Stage3; uniform vec4 uKernel_Stage3[5]; uniform vec4 uleftBorderColor_Stage4_c0_c0; uniform vec4 urightBorderColor_Stage4_c0_c0; uniform vec4 uscale0_1_Stage4_c0_c0_c1_c0; uniform vec4 uscale2_3_Stage4_c0_c0_c1_c0; uniform vec4 uscale4_5_Stage4_c0_c0_c1_c0; uniform vec4 uscale6_7_Stage4_c0_c0_c1_c0; uniform vec4 ubias0_1_Stage4_c0_c0_c1_c0; uniform vec4 ubias2_3_Stage4_c0_c0_c1_c0; uniform vec4 ubias4_5_Stage4_c0_c0_c1_c0; uniform vec4 ubias6_7_Stage4_c0_c0_c1_c0; uniform vec4 uthresholds1_7_Stage4_c0_c0_c1_c0; uniform vec4 uthresholds9_13_Stage4_c0_c0_c1_c0; uniform vec2 uImageIncrement_Stage5; uniform vec2 uBounds_Stage5; uniform vec4 uKernel_Stage5[3]; uniform sampler2D uTextureSampler_0_Stage2; uniform sampler2D uTextureSampler_0_Stage3; uniform sampler2D uTextureSampler_0_Stage5; noperspective in vec2 vEllipseOffsets_Stage0; noperspective in vec4 vEllipseRadii_Stage0; noperspective in vec4 vinColor_Stage0; noperspective in vec2 vTransformedCoords_0_Stage0; noperspective in vec2 vTransformedCoords_1_Stage0; noperspective in vec2 vTransformedCoords_2_Stage0; noperspective in vec2 vTransformedCoords_3_Stage0; vec4 RadialGradientLayout_Stage4_c0_c0_c0_c0(vec4 _input) { vec4 _output; float t = length(vTransformedCoords_2_Stage0); _output = vec4(t, 1.0, 0.0, 0.0); return _output; } vec4 UnrolledBinaryGradientColorizer_Stage4_c0_c0_c1_c0(vec4 _input) { vec4 _output; float t = _input.x; vec4 scale, bias; { if (t < uthresholds1_7_Stage4_c0_c0_c1_c0.y) { if (t < uthresholds1_7_Stage4_c0_c0_c1_c0.x) { scale = uscale0_1_Stage4_c0_c0_c1_c0; bias = ubias0_1_Stage4_c0_c0_c1_c0; } else { scale = uscale2_3_Stage4_c0_c0_c1_c0; bias = ubias2_3_Stage4_c0_c0_c1_c0; } } else { if (t < uthresholds1_7_Stage4_c0_c0_c1_c0.z) { scale = uscale4_5_Stage4_c0_c0_c1_c0; bias = ubias4_5_Stage4_c0_c0_c1_c0; } else { scale = uscale6_7_Stage4_c0_c0_c1_c0; bias = ubias6_7_Stage4_c0_c0_c1_c0; } } } _output = t * scale + bias; return _output; } vec4 ClampedGradientEffect_Stage4_c0_c0(vec4 _input) { vec4 _output; vec4 t = RadialGradientLayout_Stage4_c0_c0_c0_c0(vec4(1.0)); if (t.x < 0.0) { _output = uleftBorderColor_Stage4_c0_c0; } else if (t.x > 1.0) { _output = urightBorderColor_Stage4_c0_c0; } else { _output = UnrolledBinaryGradientColorizer_Stage4_c0_c0_c1_c0(t); } { _output.xyz *= _output.w; } return _output; } vec4 blend_src_in(vec4 src, vec4 dst) { return src * dst.w; } vec4 blend_dst_in(vec4 src, vec4 dst) { return blend_src_in(dst, src); } void main() { vec4 outputCoverage_Stage0; { vec2 offset = vEllipseOffsets_Stage0; float test = dot(offset, offset) - 1.0; vec2 grad = (2.0 * offset) * vEllipseRadii_Stage0.xy; float grad_dot = dot(grad, grad); grad_dot = max(grad_dot, 1.1754999560161448e-38); float invlen = inversesqrt(grad_dot); float edgeAlpha = clamp(0.5 - test * invlen, 0.0, 1.0); outputCoverage_Stage0 = vec4(edgeAlpha); } vec4 output_Stage2; { vec2 coord = vTransformedCoords_0_Stage0; vec2 zoom_coord = uoffset_Stage2 + coord * vec2(uxInvZoom_Stage2, uyInvZoom_Stage2); vec2 delta = (coord - uboundsUniform_Stage2.xy) * uboundsUniform_Stage2.zw; delta = min(delta, vec2(1.0, 1.0) - delta); delta *= vec2(uxInvInset_Stage2, uyInvInset_Stage2); float weight = 0.0; if (delta.x < 2.0 && delta.y < 2.0) { delta = vec2(2.0, 2.0) - delta; float dist = length(delta); dist = max(2.0 - dist, 0.0); weight = min(dist * dist, 1.0); } else { vec2 delta_squared = delta * delta; weight = min(min(delta_squared.x, delta_squared.y), 1.0); } output_Stage2 = texture(uTextureSampler_0_Stage2, mix(coord, zoom_coord, weight)); } vec4 output_Stage3; { output_Stage3 = vec4(0.0, 0.0, 0.0, 0.0); vec2 coord = vTransformedCoords_1_Stage0 - 8.0 * uImageIncrement_Stage3; vec2 coordSampled = vec2(0.0, 0.0); coordSampled = coord; coordSampled.x = clamp(coord.x, uBounds_Stage3.x, uBounds_Stage3.y); output_Stage3 += texture(uTextureSampler_0_Stage3, coordSampled) * uKernel_Stage3[0].x; coord += uImageIncrement_Stage3; coordSampled = coord; coordSampled.x = clamp(coord.x, uBounds_Stage3.x, uBounds_Stage3.y); output_Stage3 += texture(uTextureSampler_0_Stage3, coordSampled) * uKernel_Stage3[0].y; coord += uImageIncrement_Stage3; coordSampled = coord; coordSampled.x = clamp(coord.x, uBounds_Stage3.x, uBounds_Stage3.y); output_Stage3 += texture(uTextureSampler_0_Stage3, coordSampled) * uKernel_Stage3[0].z; coord += uImageIncrement_Stage3; coordSampled = coord; coordSampled.x = clamp(coord.x, uBounds_Stage3.x, uBounds_Stage3.y); output_Stage3 += texture(uTextureSampler_0_Stage3, coordSampled) * uKernel_Stage3[0].w; coord += uImageIncrement_Stage3; coordSampled = coord; coordSampled.x = clamp(coord.x, uBounds_Stage3.x, uBounds_Stage3.y); output_Stage3 += texture(uTextureSampler_0_Stage3, coordSampled) * uKernel_Stage3[1].x; coord += uImageIncrement_Stage3; coordSampled = coord; coordSampled.x = clamp(coord.x, uBounds_Stage3.x, uBounds_Stage3.y); output_Stage3 += texture(uTextureSampler_0_Stage3, coordSampled) * uKernel_Stage3[1].y; coord += uImageIncrement_Stage3; coordSampled = coord; coordSampled.x = clamp(coord.x, uBounds_Stage3.x, uBounds_Stage3.y); output_Stage3 += texture(uTextureSampler_0_Stage3, coordSampled) * uKernel_Stage3[1].z; coord += uImageIncrement_Stage3; coordSampled = coord; coordSampled.x = clamp(coord.x, uBounds_Stage3.x, uBounds_Stage3.y); output_Stage3 += texture(uTextureSampler_0_Stage3, coordSampled) * uKernel_Stage3[1].w; coord += uImageIncrement_Stage3; coordSampled = coord; coordSampled.x = clamp(coord.x, uBounds_Stage3.x, uBounds_Stage3.y); output_Stage3 += texture(uTextureSampler_0_Stage3, coordSampled) * uKernel_Stage3[2].x; coord += uImageIncrement_Stage3; coordSampled = coord; coordSampled.x = clamp(coord.x, uBounds_Stage3.x, uBounds_Stage3.y); output_Stage3 += texture(uTextureSampler_0_Stage3, coordSampled) * uKernel_Stage3[2].y; coord += uImageIncrement_Stage3; coordSampled = coord; coordSampled.x = clamp(coord.x, uBounds_Stage3.x, uBounds_Stage3.y); output_Stage3 += texture(uTextureSampler_0_Stage3, coordSampled) * uKernel_Stage3[2].z; coord += uImageIncrement_Stage3; coordSampled = coord; coordSampled.x = clamp(coord.x, uBounds_Stage3.x, uBounds_Stage3.y); output_Stage3 += texture(uTextureSampler_0_Stage3, coordSampled) * uKernel_Stage3[2].w; coord += uImageIncrement_Stage3; coordSampled = coord; coordSampled.x = clamp(coord.x, uBounds_Stage3.x, uBounds_Stage3.y); output_Stage3 += texture(uTextureSampler_0_Stage3, coordSampled) * uKernel_Stage3[3].x; coord += uImageIncrement_Stage3; coordSampled = coord; coordSampled.x = clamp(coord.x, uBounds_Stage3.x, uBounds_Stage3.y); output_Stage3 += texture(uTextureSampler_0_Stage3, coordSampled) * uKernel_Stage3[3].y; coord += uImageIncrement_Stage3; coordSampled = coord; coordSampled.x = clamp(coord.x, uBounds_Stage3.x, uBounds_Stage3.y); output_Stage3 += texture(uTextureSampler_0_Stage3, coordSampled) * uKernel_Stage3[3].z; coord += uImageIncrement_Stage3; coordSampled = coord; coordSampled.x = clamp(coord.x, uBounds_Stage3.x, uBounds_Stage3.y); output_Stage3 += texture(uTextureSampler_0_Stage3, coordSampled) * uKernel_Stage3[3].w; coord += uImageIncrement_Stage3; coordSampled = coord; coordSampled.x = clamp(coord.x, uBounds_Stage3.x, uBounds_Stage3.y); output_Stage3 += texture(uTextureSampler_0_Stage3, coordSampled) * uKernel_Stage3[4].x; coord += uImageIncrement_Stage3; output_Stage3 *= outputCoverage_Stage0; } vec4 output_Stage4; { output_Stage4 = blend_dst_in(output_Stage3, ClampedGradientEffect_Stage4_c0_c0(vec4(1.0))); } vec4 output_Stage5; { output_Stage5 = vec4(0.0, 0.0, 0.0, 0.0); vec2 coord = vTransformedCoords_3_Stage0 - 4.0 * uImageIncrement_Stage5; vec2 coordSampled = vec2(0.0, 0.0); coordSampled = coord; coordSampled.y = clamp(coord.y, uBounds_Stage5.x, uBounds_Stage5.y); output_Stage5 += texture(uTextureSampler_0_Stage5, coordSampled) * uKernel_Stage5[0].x; coord += uImageIncrement_Stage5; coordSampled = coord; coordSampled.y = clamp(coord.y, uBounds_Stage5.x, uBounds_Stage5.y); output_Stage5 += texture(uTextureSampler_0_Stage5, coordSampled) * uKernel_Stage5[0].y; coord += uImageIncrement_Stage5; coordSampled = coord; coordSampled.y = clamp(coord.y, uBounds_Stage5.x, uBounds_Stage5.y); output_Stage5 += texture(uTextureSampler_0_Stage5, coordSampled) * uKernel_Stage5[0].z; coord += uImageIncrement_Stage5; coordSampled = coord; coordSampled.y = clamp(coord.y, uBounds_Stage5.x, uBounds_Stage5.y); output_Stage5 += texture(uTextureSampler_0_Stage5, coordSampled) * uKernel_Stage5[0].w; coord += uImageIncrement_Stage5; coordSampled = coord; coordSampled.y = clamp(coord.y, uBounds_Stage5.x, uBounds_Stage5.y); output_Stage5 += texture(uTextureSampler_0_Stage5, coordSampled) * uKernel_Stage5[1].x; coord += uImageIncrement_Stage5; coordSampled = coord; coordSampled.y = clamp(coord.y, uBounds_Stage5.x, uBounds_Stage5.y); output_Stage5 += texture(uTextureSampler_0_Stage5, coordSampled) * uKernel_Stage5[1].y; coord += uImageIncrement_Stage5; coordSampled = coord; coordSampled.y = clamp(coord.y, uBounds_Stage5.x, uBounds_Stage5.y); output_Stage5 += texture(uTextureSampler_0_Stage5, coordSampled) * uKernel_Stage5[1].z; coord += uImageIncrement_Stage5; coordSampled = coord; coordSampled.y = clamp(coord.y, uBounds_Stage5.x, uBounds_Stage5.y); output_Stage5 += texture(uTextureSampler_0_Stage5, coordSampled) * uKernel_Stage5[1].w; coord += uImageIncrement_Stage5; coordSampled = coord; coordSampled.y = clamp(coord.y, uBounds_Stage5.x, uBounds_Stage5.y); output_Stage5 += texture(uTextureSampler_0_Stage5, coordSampled) * uKernel_Stage5[2].x; coord += uImageIncrement_Stage5; output_Stage5 *= output_Stage4; } { sk_FragColor = output_Stage5 * output_Stage2; } } [vertex shader] #version 140 uniform vec4 sk_RTAdjust; uniform mat3 uCoordTransformMatrix_0_Stage0; uniform mat3 uCoordTransformMatrix_1_Stage0; uniform mat3 uCoordTransformMatrix_2_Stage0; uniform mat3 uCoordTransformMatrix_3_Stage0; in vec2 inPosition; in vec4 inColor; in vec2 inEllipseOffset; in vec4 inEllipseRadii; noperspective out vec2 vEllipseOffsets_Stage0; noperspective out vec4 vEllipseRadii_Stage0; noperspective out vec4 vinColor_Stage0; noperspective out vec2 vTransformedCoords_0_Stage0; noperspective out vec2 vTransformedCoords_1_Stage0; noperspective out vec2 vTransformedCoords_2_Stage0; noperspective out vec2 vTransformedCoords_3_Stage0; void main() { vEllipseOffsets_Stage0 = inEllipseOffset; vEllipseRadii_Stage0 = inEllipseRadii; vinColor_Stage0 = inColor; vec2 pos2 = inPosition; vTransformedCoords_0_Stage0 = (uCoordTransformMatrix_0_Stage0 * vec3(inPosition, 1.0)).xy; vTransformedCoords_1_Stage0 = (uCoordTransformMatrix_1_Stage0 * vec3(inPosition, 1.0)).xy; vTransformedCoords_2_Stage0 = (uCoordTransformMatrix_2_Stage0 * vec3(inPosition, 1.0)).xy; vTransformedCoords_3_Stage0 = (uCoordTransformMatrix_3_Stage0 * vec3(inPosition, 1.0)).xy; gl_Position = vec4(pos2.x, pos2.y, 0.0, 1.0); gl_Position = vec4(gl_Position.xy * sk_RTAdjust.xz + gl_Position.ww * sk_RTAdjust.yw, 0.0, gl_Position.w); }