void emitCode(EmitArgs& args) override { GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder; const GrCircleBlurFragmentProcessor& _outer = args.fFp.cast<GrCircleBlurFragmentProcessor>(); (void)_outer; auto circleRect = _outer.circleRect(); (void)circleRect; auto textureRadius = _outer.textureRadius(); (void)textureRadius; auto solidRadius = _outer.solidRadius(); (void)solidRadius; fCircleDataVar = args.fUniformHandler->addUniform(kFragment_GrShaderFlag, kHalf4_GrSLType, kDefault_GrSLPrecision, "circleData"); fragBuilder->codeAppendf( "half2 vec = half2(half((sk_FragCoord.x - float(%s.x)) * float(%s.w)), " "half((sk_FragCoord.y - float(%s.y)) * float(%s.w)));\nhalf dist = " "float(length(vec)) + (0.5 - float(%s.z)) * float(%s.w);\n%s = %s * texture(%s, " "float2(half2(dist, 0.5))).%s.w;\n", args.fUniformHandler->getUniformCStr(fCircleDataVar), args.fUniformHandler->getUniformCStr(fCircleDataVar), args.fUniformHandler->getUniformCStr(fCircleDataVar), args.fUniformHandler->getUniformCStr(fCircleDataVar), args.fUniformHandler->getUniformCStr(fCircleDataVar), args.fUniformHandler->getUniformCStr(fCircleDataVar), args.fOutputColor, args.fInputColor ? args.fInputColor : "half4(1)", fragBuilder->getProgramBuilder()->samplerVariable(args.fTexSamplers[0]).c_str(), fragBuilder->getProgramBuilder()->samplerSwizzle(args.fTexSamplers[0]).c_str()); }
void emitCode(EmitArgs& args) override { GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder; const GrMagnifierEffect& _outer = args.fFp.cast<GrMagnifierEffect>(); (void)_outer; auto bounds = _outer.bounds(); (void)bounds; auto srcRect = _outer.srcRect(); (void)srcRect; auto xInvZoom = _outer.xInvZoom(); (void)xInvZoom; auto yInvZoom = _outer.yInvZoom(); (void)yInvZoom; auto xInvInset = _outer.xInvInset(); (void)xInvInset; auto yInvInset = _outer.yInvInset(); (void)yInvInset; fBoundsUniformVar = args.fUniformHandler->addUniform( kFragment_GrShaderFlag, kFloat4_GrSLType, kDefault_GrSLPrecision, "boundsUniform"); fXInvZoomVar = args.fUniformHandler->addUniform( kFragment_GrShaderFlag, kFloat_GrSLType, kDefault_GrSLPrecision, "xInvZoom"); fYInvZoomVar = args.fUniformHandler->addUniform( kFragment_GrShaderFlag, kFloat_GrSLType, kDefault_GrSLPrecision, "yInvZoom"); fXInvInsetVar = args.fUniformHandler->addUniform( kFragment_GrShaderFlag, kFloat_GrSLType, kDefault_GrSLPrecision, "xInvInset"); fYInvInsetVar = args.fUniformHandler->addUniform( kFragment_GrShaderFlag, kFloat_GrSLType, kDefault_GrSLPrecision, "yInvInset"); fOffsetVar = args.fUniformHandler->addUniform( kFragment_GrShaderFlag, kHalf2_GrSLType, kDefault_GrSLPrecision, "offset"); SkString sk_TransformedCoords2D_0 = fragBuilder->ensureCoords2D(args.fTransformedCoords[0]); fragBuilder->codeAppendf( "float2 coord = %s;\nfloat2 zoom_coord = float2(%s + half2(coord * " "float2(half2(half(%s), half(%s)))));\nfloat2 delta = (coord - %s.xy) * " "%s.zw;\ndelta = min(delta, float2(half2(1.0, 1.0) - half2(delta)));\ndelta *= " "float2(half2(half(%s), half(%s)));\nhalf weight = 0.0;\nif (delta.x < 2.0 && " "delta.y < 2.0) {\n delta = float2(half2(2.0, 2.0) - half2(delta));\n half " "dist = half(length(delta));\n dist = half(max(2.0 - float(dist), 0.0));\n " "weight = half(min(float(dist * dist), 1.0));\n} else {\n ", sk_TransformedCoords2D_0.c_str(), args.fUniformHandler->getUniformCStr(fOffsetVar), args.fUniformHandler->getUniformCStr(fXInvZoomVar), args.fUniformHandler->getUniformCStr(fYInvZoomVar), args.fUniformHandler->getUniformCStr(fBoundsUniformVar), args.fUniformHandler->getUniformCStr(fBoundsUniformVar), args.fUniformHandler->getUniformCStr(fXInvInsetVar), args.fUniformHandler->getUniformCStr(fYInvInsetVar)); fragBuilder->codeAppendf( "float2 delta_squared = delta * delta;\n weight = half(min(min(delta_squared.x, " "delta_squared.y), 1.0));\n}\n%s = texture(%s, mix(coord, zoom_coord, " "float(weight))).%s;\n", args.fOutputColor, fragBuilder->getProgramBuilder()->samplerVariable(args.fTexSamplers[0]).c_str(), fragBuilder->getProgramBuilder()->samplerSwizzle(args.fTexSamplers[0]).c_str()); }
void emitCode(EmitArgs& args) override { GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder; const GrSimpleTextureEffect& _outer = args.fFp.cast<GrSimpleTextureEffect>(); (void)_outer; auto matrix = _outer.matrix(); (void)matrix; SkString sk_TransformedCoords2D_0 = fragBuilder->ensureCoords2D(args.fTransformedCoords[0]); fragBuilder->codeAppendf( "%s = %s * texture(%s, %s).%s;\n", args.fOutputColor, args.fInputColor ? args.fInputColor : "half4(1)", fragBuilder->getProgramBuilder()->samplerVariable(args.fTexSamplers[0]).c_str(), sk_TransformedCoords2D_0.c_str(), fragBuilder->getProgramBuilder()->samplerSwizzle(args.fTexSamplers[0]).c_str()); }
void emitCode(EmitArgs& args) override { GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder; const GrRectBlurEffect& _outer = args.fFp.cast<GrRectBlurEffect>(); (void)_outer; auto rect = _outer.rect(); (void)rect; auto sigma = _outer.sigma(); (void)sigma; highPrecision = ((((abs(rect.left()) > 16000.0 || abs(rect.top()) > 16000.0) || abs(rect.right()) > 16000.0) || abs(rect.bottom()) > 16000.0) || abs(rect.right() - rect.left()) > 16000.0) || abs(rect.bottom() - rect.top()) > 16000.0; fRectVar = args.fUniformHandler->addUniform(kFragment_GrShaderFlag, kFloat4_GrSLType, kDefault_GrSLPrecision, "rect"); if (!highPrecision) { fProxyRectHalfVar = args.fUniformHandler->addUniform(kFragment_GrShaderFlag, kHalf4_GrSLType, kDefault_GrSLPrecision, "proxyRectHalf"); } if (highPrecision) { fProxyRectFloatVar = args.fUniformHandler->addUniform(kFragment_GrShaderFlag, kFloat4_GrSLType, kDefault_GrSLPrecision, "proxyRectFloat"); } fProfileSizeVar = args.fUniformHandler->addUniform(kFragment_GrShaderFlag, kHalf_GrSLType, kDefault_GrSLPrecision, "profileSize"); fragBuilder->codeAppendf( "bool highPrecision = %s;\n@if (highPrecision) {\n float2 translatedPos = " "sk_FragCoord.xy - %s.xy;\n float width = %s.z - %s.x;\n float height = %s.w " "- %s.y;\n float2 smallDims = float2(width - float(%s), height - float(%s));\n " " float center = 2.0 * floor(float(float(%s / 2.0) + 0.25)) - 1.0;\n float2 wh " "= smallDims - float2(center, center);\n half hcoord = " "half((abs(translatedPos.x - 0.5 * width) - 0.5 * wh.x) / float(%s));\n half " "hlookup = texture(%s, float2(float(hcoord), 0.5)).%s.w", (highPrecision ? "true" : "false"), args.fUniformHandler->getUniformCStr(fRectVar), args.fUniformHandler->getUniformCStr(fRectVar), args.fUniformHandler->getUniformCStr(fRectVar), args.fUniformHandler->getUniformCStr(fRectVar), args.fUniformHandler->getUniformCStr(fRectVar), args.fUniformHandler->getUniformCStr(fProfileSizeVar), args.fUniformHandler->getUniformCStr(fProfileSizeVar), args.fUniformHandler->getUniformCStr(fProfileSizeVar), args.fUniformHandler->getUniformCStr(fProfileSizeVar), fragBuilder->getProgramBuilder()->samplerVariable(args.fTexSamplers[0]).c_str(), fragBuilder->getProgramBuilder()->samplerSwizzle(args.fTexSamplers[0]).c_str()); fragBuilder->codeAppendf( ";\n half vcoord = half((abs(translatedPos.y - 0.5 * height) - 0.5 * wh.y) / " "float(%s));\n half vlookup = texture(%s, float2(float(vcoord), 0.5)).%s.w;\n " " %s = (%s * hlookup) * vlookup;\n} else {\n half2 translatedPos = " "half2(sk_FragCoord.xy - %s.xy);\n half width = half(%s.z - %s.x);\n half " "height = half(%s.w - %s.y);\n half2 smallDims = half2(width - %s, height - " "%s);\n half center = half(2.0 * floor(float(float(%s / 2.0) + 0.25)) - 1.0);\n " " half2 wh = smallDims - half2(float2(floa", args.fUniformHandler->getUniformCStr(fProfileSizeVar), fragBuilder->getProgramBuilder()->samplerVariable(args.fTexSamplers[0]).c_str(), fragBuilder->getProgramBuilder()->samplerSwizzle(args.fTexSamplers[0]).c_str(), args.fOutputColor, args.fInputColor ? args.fInputColor : "half4(1)", args.fUniformHandler->getUniformCStr(fRectVar), args.fUniformHandler->getUniformCStr(fRectVar), args.fUniformHandler->getUniformCStr(fRectVar), args.fUniformHandler->getUniformCStr(fRectVar), args.fUniformHandler->getUniformCStr(fRectVar), args.fUniformHandler->getUniformCStr(fProfileSizeVar), args.fUniformHandler->getUniformCStr(fProfileSizeVar), args.fUniformHandler->getUniformCStr(fProfileSizeVar)); fragBuilder->codeAppendf( "t(center), float(center)));\n half hcoord = " "half((abs(float(float(translatedPos.x) - 0.5 * float(width))) - 0.5 * " "float(wh.x)) / float(%s));\n half hlookup = texture(%s, float2(float(hcoord), " "0.5)).%s.w;\n half vcoord = half((abs(float(float(translatedPos.y) - 0.5 * " "float(height))) - 0.5 * float(wh.y)) / float(%s));\n half vlookup = " "texture(%s, float2(float(vcoord), 0.5)).%s.w;\n %s = (%s * hlookup) * " "vlookup;\n}\n", args.fUniformHandler->getUniformCStr(fProfileSizeVar), fragBuilder->getProgramBuilder()->samplerVariable(args.fTexSamplers[0]).c_str(), fragBuilder->getProgramBuilder()->samplerSwizzle(args.fTexSamplers[0]).c_str(), args.fUniformHandler->getUniformCStr(fProfileSizeVar), fragBuilder->getProgramBuilder()->samplerVariable(args.fTexSamplers[0]).c_str(), fragBuilder->getProgramBuilder()->samplerSwizzle(args.fTexSamplers[0]).c_str(), args.fOutputColor, args.fInputColor ? args.fInputColor : "half4(1)"); }