[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 ustart_Stage1_c0_c0_c1_c0; uniform vec4 uend_Stage1_c0_c0_c1_c0; uniform vec2 uDstTextureUpperLeft_Stage2; uniform vec2 uDstTextureCoordScale_Stage2; uniform sampler2D uTextureSampler_0_Stage0; uniform sampler2D uDstTextureSampler_Stage2; noperspective in vec2 vTextureCoords_Stage0; flat in int vTexIndex_Stage0; noperspective in vec4 vinColor_Stage0; noperspective in vec2 vTransformedCoords_0_Stage0; vec4 LinearGradientLayout_Stage1_c0_c0_c0_c0(vec4 _input) { vec4 _output; float t = vTransformedCoords_0_Stage0.x + 9.9999997473787516e-06; _output = vec4(t, 1.0, 0.0, 0.0); return _output; } vec4 SingleIntervalGradientColorizer_Stage1_c0_c0_c1_c0(vec4 _input) { vec4 _output; float t = _input.x; _output = (1.0 - t) * ustart_Stage1_c0_c0_c1_c0 + t * uend_Stage1_c0_c0_c1_c0; return _output; } vec4 TiledGradientEffect_Stage1_c0_c0(vec4 _input) { vec4 _output; vec4 t = LinearGradientLayout_Stage1_c0_c0_c0_c0(vec4(1.0)); { { t.x = fract(t.x); } _output = SingleIntervalGradientColorizer_Stage1_c0_c0_c1_c0(t); } return _output; } vec4 blend_src_out(vec4 src, vec4 dst) { return (1.0 - dst.w) * src; } void main() { vec4 outputCoverage_Stage0; { vec4 texColor; { texColor = texture(uTextureSampler_0_Stage0, vTextureCoords_Stage0); } outputCoverage_Stage0 = texColor; } vec4 output_Stage1; { output_Stage1 = TiledGradientEffect_Stage1_c0_c0(vec4(1.0, 1.0, 1.0, 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_out(output_Stage1, _dstColor); float lerpRed = mix(_dstColor.w, sk_FragColor.w, outputCoverage_Stage0.x); float lerpBlue = mix(_dstColor.w, sk_FragColor.w, outputCoverage_Stage0.y); float lerpGreen = mix(_dstColor.w, sk_FragColor.w, outputCoverage_Stage0.z); sk_FragColor = outputCoverage_Stage0 * sk_FragColor + (vec4(1.0) - outputCoverage_Stage0) * _dstColor; sk_FragColor.w = max(max(lerpRed, lerpBlue), lerpGreen); } } [vertex shader] #version 140 uniform vec4 sk_RTAdjust; uniform vec2 uAtlasSizeInv_Stage0; uniform mat3 uCoordTransformMatrix_0_Stage0; in vec2 inPosition; in vec4 inColor; in uvec2 inTextureCoords; noperspective out vec2 vTextureCoords_Stage0; flat out int vTexIndex_Stage0; noperspective out vec4 vinColor_Stage0; noperspective out vec2 vTransformedCoords_0_Stage0; void main() { ivec2 signedCoords = ivec2(int(inTextureCoords.x), int(inTextureCoords.y)); vec2 unormTexCoords = vec2(float(signedCoords.x / 2), float(signedCoords.y / 2)); vTextureCoords_Stage0 = unormTexCoords * uAtlasSizeInv_Stage0; vTexIndex_Stage0 = 0; vinColor_Stage0 = inColor; vTransformedCoords_0_Stage0 = (uCoordTransformMatrix_0_Stage0 * vec3(inPosition, 1.0)).xy; gl_Position = vec4(inPosition.x, inPosition.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); }