Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Public Member Functions | Private Member Functions | List of all members
GrQuadEffect::Impl Class Reference
Inheritance diagram for GrQuadEffect::Impl:
GrGeometryProcessor::ProgramImpl

Public Member Functions

void setData (const GrGLSLProgramDataManager &pdman, const GrShaderCaps &shaderCaps, const GrGeometryProcessor &geomProc) override
 
- Public Member Functions inherited from GrGeometryProcessor::ProgramImpl
virtual ~ProgramImpl ()=default
 
std::tuple< FPCoordsMap, GrShaderVaremitCode (EmitArgs &, const GrPipeline &pipeline)
 
void emitTransformCode (GrGLSLVertexBuilder *vb, GrGLSLUniformHandler *uniformHandler)
 

Private Member Functions

void onEmitCode (EmitArgs &, GrGPArgs *) override
 

Additional Inherited Members

- Public Types inherited from GrGeometryProcessor::ProgramImpl
using UniformHandle = GrGLSLProgramDataManager::UniformHandle
 
using SamplerHandle = GrGLSLUniformHandler::SamplerHandle
 
using FPCoordsMap = std::unordered_map< const GrFragmentProcessor *, FPCoords >
 
- Static Public Member Functions inherited from GrGeometryProcessor::ProgramImpl
static uint32_t ComputeMatrixKey (const GrShaderCaps &caps, const SkMatrix &mat)
 
static uint32_t ComputeMatrixKeys (const GrShaderCaps &shaderCaps, const SkMatrix &viewMatrix, const SkMatrix &localMatrix)
 
static uint32_t AddMatrixKeys (const GrShaderCaps &shaderCaps, uint32_t flags, const SkMatrix &viewMatrix, const SkMatrix &localMatrix)
 
- Static Public Attributes inherited from GrGeometryProcessor::ProgramImpl
static constexpr int kMatrixKeyBits = 2
 
- Protected Member Functions inherited from GrGeometryProcessor::ProgramImpl
void setupUniformColor (GrGLSLFPFragmentBuilder *fragBuilder, GrGLSLUniformHandler *uniformHandler, const char *outputName, UniformHandle *colorUniform)
 
- Static Protected Member Functions inherited from GrGeometryProcessor::ProgramImpl
static void SetTransform (const GrGLSLProgramDataManager &, const GrShaderCaps &, const UniformHandle &uniform, const SkMatrix &matrix, SkMatrix *state=nullptr)
 
static void WriteOutputPosition (GrGLSLVertexBuilder *, GrGPArgs *, const char *posName)
 
static void WriteOutputPosition (GrGLSLVertexBuilder *, GrGLSLUniformHandler *, const GrShaderCaps &, GrGPArgs *, const char *posName, const SkMatrix &viewMatrix, UniformHandle *viewMatrixUniform)
 
static void WriteLocalCoord (GrGLSLVertexBuilder *, GrGLSLUniformHandler *, const GrShaderCaps &, GrGPArgs *, GrShaderVar localVar, const SkMatrix &localMatrix, UniformHandle *localMatrixUniform)
 

Detailed Description

Definition at line 212 of file GrBezierEffect.cpp.

Member Function Documentation

◆ onEmitCode()

void GrQuadEffect::Impl::onEmitCode ( EmitArgs args,
GrGPArgs gpArgs 
)
overrideprivatevirtual

Implements GrGeometryProcessor::ProgramImpl.

Definition at line 247 of file GrBezierEffect.cpp.

247 {
248 GrGLSLVertexBuilder* vertBuilder = args.fVertBuilder;
249 const GrQuadEffect& gp = args.fGeomProc.cast<GrQuadEffect>();
250 GrGLSLVaryingHandler* varyingHandler = args.fVaryingHandler;
251 GrGLSLUniformHandler* uniformHandler = args.fUniformHandler;
252
253 // emit attributes
254 varyingHandler->emitAttributes(gp);
255
257 varyingHandler->addVarying("HairQuadEdge", &v);
258 vertBuilder->codeAppendf("%s = %s;", v.vsOut(), gp.inHairQuadEdge().name());
259
260 GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder;
261 // Setup pass through color
262 fragBuilder->codeAppendf("half4 %s;", args.fOutputColor);
263 this->setupUniformColor(fragBuilder, uniformHandler, args.fOutputColor, &fColorUniform);
264
265 // Setup position
266 WriteOutputPosition(vertBuilder,
267 uniformHandler,
268 *args.fShaderCaps,
269 gpArgs,
270 gp.inPosition().name(),
271 gp.fViewMatrix,
272 &fViewMatrixUniform);
273 if (gp.fUsesLocalCoords) {
274 WriteLocalCoord(vertBuilder,
275 uniformHandler,
276 *args.fShaderCaps,
277 gpArgs,
278 gp.inPosition().asShaderVar(),
279 gp.fLocalMatrix,
280 &fLocalMatrixUniform);
281 }
282
283 fragBuilder->codeAppendf("half edgeAlpha;");
284
285 fragBuilder->codeAppendf("half2 duvdx = half2(dFdx(%s.xy));", v.fsIn());
286 fragBuilder->codeAppendf("half2 duvdy = half2(dFdy(%s.xy));", v.fsIn());
287 fragBuilder->codeAppendf("half2 gF = half2(2.0 * %s.x * duvdx.x - duvdx.y,"
288 " 2.0 * %s.x * duvdy.x - duvdy.y);",
289 v.fsIn(), v.fsIn());
290 fragBuilder->codeAppendf("edgeAlpha = half(%s.x * %s.x - %s.y);",
291 v.fsIn(), v.fsIn(), v.fsIn());
292 fragBuilder->codeAppend("edgeAlpha = sqrt(edgeAlpha * edgeAlpha / dot(gF, gF));");
293 fragBuilder->codeAppend("edgeAlpha = max(1.0 - edgeAlpha, 0.0);");
294 // Add line below for smooth cubic ramp
295 // fragBuilder->codeAppend("edgeAlpha = edgeAlpha*edgeAlpha*(3.0-2.0*edgeAlpha);");
296
297 if (gp.fCoverageScale != 0xFF) {
298 const char* coverageScale;
299 fCoverageScaleUniform = uniformHandler->addUniform(nullptr,
302 "Coverage",
303 &coverageScale);
304 fragBuilder->codeAppendf("half4 %s = half4(%s * edgeAlpha);", args.fOutputCoverage,
305 coverageScale);
306 } else {
307 fragBuilder->codeAppendf("half4 %s = half4(edgeAlpha);", args.fOutputCoverage);
308 }
309}
@ kFragment_GrShaderFlag
void codeAppend(const char *str)
void codeAppendf(const char format[],...) SK_PRINTF_LIKE(2
UniformHandle addUniform(const GrProcessor *owner, uint32_t visibility, SkSLType type, const char *name, const char **outName=nullptr)
constexpr const char * name() const
void setupUniformColor(GrGLSLFPFragmentBuilder *fragBuilder, GrGLSLUniformHandler *uniformHandler, const char *outputName, UniformHandle *colorUniform)
static void WriteOutputPosition(GrGLSLVertexBuilder *, GrGPArgs *, const char *posName)
static void WriteLocalCoord(GrGLSLVertexBuilder *, GrGLSLUniformHandler *, const GrShaderCaps &, GrGPArgs *, GrShaderVar localVar, const SkMatrix &localMatrix, UniformHandle *localMatrixUniform)
const T & cast() const
G_BEGIN_DECLS G_MODULE_EXPORT FlValue * args

◆ setData()

void GrQuadEffect::Impl::setData ( const GrGLSLProgramDataManager ,
const GrShaderCaps ,
const GrGeometryProcessor  
)
inlineoverridevirtual

A ProgramImpl instance can be reused with any GrGeometryProcessor that produces the same key. This function reads data from a GrGeometryProcessor and updates any uniform variables required by the shaders created in emitCode(). The GrGeometryProcessor parameter is guaranteed to be of the same type and to have an identical processor key as the GrGeometryProcessor that created this ProgramImpl.

Implements GrGeometryProcessor::ProgramImpl.

Definition at line 214 of file GrBezierEffect.cpp.

216 {
217 const GrQuadEffect& qe = geomProc.cast<GrQuadEffect>();
218
219 SetTransform(pdman, shaderCaps, fViewMatrixUniform, qe.fViewMatrix, &fViewMatrix);
220 SetTransform(pdman, shaderCaps, fLocalMatrixUniform, qe.fLocalMatrix, &fLocalMatrix);
221
222 if (qe.fColor != fColor) {
223 pdman.set4fv(fColorUniform, 1, qe.fColor.vec());
224 fColor = qe.fColor;
225 }
226
227 if (qe.fCoverageScale != 0xff && qe.fCoverageScale != fCoverageScale) {
228 pdman.set1f(fCoverageScaleUniform, GrNormalizeByteToFloat(qe.fCoverageScale));
229 fCoverageScale = qe.fCoverageScale;
230 }
231 }
static float GrNormalizeByteToFloat(uint8_t value)
Definition GrColor.h:71
static void SetTransform(const GrGLSLProgramDataManager &, const GrShaderCaps &, const UniformHandle &uniform, const SkMatrix &matrix, SkMatrix *state=nullptr)
const float * vec() const
Definition SkColor.h:308

The documentation for this class was generated from the following file: