[require] GLSL >= 1.40 [fragment shader] #version 140 #extension GL_ARB_fragment_coord_conventions : require layout(origin_upper_left) in vec4 gl_FragCoord; out vec4 sk_FragColor; uniform vec4 uboundsUniform_Stage1_c0_c0; uniform float uxInvZoom_Stage1_c0_c0; uniform float uyInvZoom_Stage1_c0_c0; uniform float uxInvInset_Stage1_c0_c0; uniform float uyInvInset_Stage1_c0_c0; uniform vec2 uoffset_Stage1_c0_c0; uniform vec2 uDstTextureUpperLeft_Stage2; uniform vec2 uDstTextureCoordScale_Stage2; uniform sampler2D uTextureSampler_0_Stage1; uniform sampler2D uDstTextureSampler_Stage2; noperspective in vec2 vTransformedCoords_0_Stage0; noperspective in float vcoverage_Stage0; flat in vec4 vgeomDomain_Stage0; vec4 MagnifierEffect_Stage1_c0_c0(vec4 _input) { vec4 _output; vec2 coord = vTransformedCoords_0_Stage0; vec2 zoom_coord = uoffset_Stage1_c0_c0 + coord * vec2(uxInvZoom_Stage1_c0_c0, uyInvZoom_Stage1_c0_c0); vec2 delta = (coord - uboundsUniform_Stage1_c0_c0.xy) * uboundsUniform_Stage1_c0_c0.zw; delta = min(delta, vec2(1.0, 1.0) - delta); delta *= vec2(uxInvInset_Stage1_c0_c0, uyInvInset_Stage1_c0_c0); 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 = texture(uTextureSampler_0_Stage1, mix(coord, zoom_coord, weight)); return _output; } vec4 blend_src(vec4 src, vec4 dst) { return src; } void main() { vec4 outputCoverage_Stage0; { float coverage = vcoverage_Stage0; vec4 geoDomain; geoDomain = vgeomDomain_Stage0; if (coverage < 0.5) { vec4 dists4 = clamp(vec4(1.0, 1.0, -1.0, -1.0) * (gl_FragCoord.xyxy - geoDomain), 0.0, 1.0); vec2 dists2 = dists4.xy * dists4.zw; coverage = min(coverage, dists2.x * dists2.y); } outputCoverage_Stage0 = vec4(coverage); } vec4 output_Stage1; { output_Stage1 = MagnifierEffect_Stage1_c0_c0(vec4(1.0)); } { if (all(lessThanEqual(outputCoverage_Stage0.xyz, vec3(0.0)))) { discard; } vec2 _dstTexCoord = (gl_FragCoord.xy - uDstTextureUpperLeft_Stage2) * uDstTextureCoordScale_Stage2; _dstTexCoord.y = 1.0 - _dstTexCoord.y; vec4 _dstColor = texture(uDstTextureSampler_Stage2, _dstTexCoord); sk_FragColor = blend_src(output_Stage1, _dstColor); sk_FragColor = outputCoverage_Stage0 * sk_FragColor + (vec4(1.0) - outputCoverage_Stage0) * _dstColor; } } [vertex shader] #version 140 uniform vec4 sk_RTAdjust; uniform mat3 uCoordTransformMatrix_0_Stage0; in vec2 position; in float coverage; in vec2 localCoord; in vec4 geomDomain; noperspective out vec2 vTransformedCoords_0_Stage0; noperspective out float vcoverage_Stage0; flat out vec4 vgeomDomain_Stage0; void main() { vec2 position = position; vTransformedCoords_0_Stage0 = (uCoordTransformMatrix_0_Stage0 * vec3(localCoord, 1.0)).xy; vcoverage_Stage0 = coverage; vgeomDomain_Stage0 = geomDomain; gl_Position = vec4(position.x, position.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); }