Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Public Member Functions | Private Member Functions | List of all members
GrBitmapTextGeoProc::Impl Class Reference
Inheritance diagram for GrBitmapTextGeoProc::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 &args, GrGPArgs *gpArgs) 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 38 of file GrBitmapTextGeoProc.cpp.

Member Function Documentation

◆ onEmitCode()

void GrBitmapTextGeoProc::Impl::onEmitCode ( EmitArgs args,
GrGPArgs gpArgs 
)
inlineoverrideprivatevirtual

Implements GrGeometryProcessor::ProgramImpl.

Definition at line 64 of file GrBitmapTextGeoProc.cpp.

64 {
65 const GrBitmapTextGeoProc& btgp = args.fGeomProc.cast<GrBitmapTextGeoProc>();
66
67 GrGLSLVertexBuilder* vertBuilder = args.fVertBuilder;
68 GrGLSLVaryingHandler* varyingHandler = args.fVaryingHandler;
69 GrGLSLUniformHandler* uniformHandler = args.fUniformHandler;
70
71 fColorSpaceXformHelper.emitCode(uniformHandler,
72 btgp.fColorSpaceXform.get());
73
74 // emit attributes
75 varyingHandler->emitAttributes(btgp);
76
77 const char* atlasDimensionsInvName;
78 fAtlasDimensionsInvUniform = uniformHandler->addUniform(nullptr, kVertex_GrShaderFlag,
79 SkSLType::kFloat2, "AtlasSizeInv", &atlasDimensionsInvName);
80
81 GrGLSLVarying uv, texIdx;
83 btgp.numTextureSamplers(),
84 btgp.fInTextureCoords.name(),
85 atlasDimensionsInvName,
86 &uv,
87 &texIdx,
88 nullptr);
89
90 GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder;
91 // Setup pass through color
92 fragBuilder->codeAppendf("half4 %s;", args.fOutputColor);
93 if (btgp.hasVertexColor()) {
94 varyingHandler->addPassThroughAttribute(btgp.fInColor.asShaderVar(), args.fOutputColor);
95 } else {
96 this->setupUniformColor(fragBuilder, uniformHandler, args.fOutputColor,
97 &fColorUniform);
98 }
99
100 // Setup position
101 gpArgs->fPositionVar = btgp.fInPosition.asShaderVar();
102 WriteLocalCoord(vertBuilder,
103 uniformHandler,
104 *args.fShaderCaps,
105 gpArgs,
106 btgp.fInPosition.asShaderVar(),
107 btgp.fLocalMatrix,
108 &fLocalMatrixUniform);
109
110 fragBuilder->codeAppend("half4 texColor;");
112 texIdx, uv.fsIn(), "texColor");
113 if (!fColorSpaceXformHelper.isNoop()) {
114 fragBuilder->codeAppend("texColor = ");
115 fragBuilder->appendColorGamutXform("texColor", &fColorSpaceXformHelper);
116 fragBuilder->codeAppend(";");
117 }
118
119 if (btgp.fMaskFormat == MaskFormat::kARGB) {
120 // modulate by color
121 fragBuilder->codeAppendf("%s = %s * texColor;", args.fOutputColor, args.fOutputColor);
122 fragBuilder->codeAppendf("const half4 %s = half4(1);", args.fOutputCoverage);
123 } else {
124 fragBuilder->codeAppendf("half4 %s = texColor;", args.fOutputCoverage);
125 }
126 }
static void append_index_uv_varyings(GrGeometryProcessor::ProgramImpl::EmitArgs &args, int numTextureSamplers, const char *inTexCoordsName, const char *atlasDimensionsInvName, GrGLSLVarying *uv, GrGLSLVarying *texIdx, GrGLSLVarying *st)
static void append_multitexture_lookup(GrGeometryProcessor::ProgramImpl::EmitArgs &args, int numTextureSamplers, const GrGLSLVarying &texIdx, const char *coordName, const char *colorName)
@ kVertex_GrShaderFlag
void emitCode(GrGLSLUniformHandler *uniformHandler, const GrColorSpaceXform *colorSpaceXform, uint32_t visibility=kFragment_GrShaderFlag)
void codeAppend(const char *str)
void appendColorGamutXform(SkString *out, const char *srcColor, GrGLSLColorSpaceXformHelper *colorXformHelper)
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)
void emitAttributes(const GrGeometryProcessor &)
void addPassThroughAttribute(const GrShaderVar &vsVar, const char *output, Interpolation=Interpolation::kInterpolated)
const char * fsIn() const
constexpr const char * name() const
void setupUniformColor(GrGLSLFPFragmentBuilder *fragBuilder, GrGLSLUniformHandler *uniformHandler, const char *outputName, UniformHandle *colorUniform)
static void WriteLocalCoord(GrGLSLVertexBuilder *, GrGLSLUniformHandler *, const GrShaderCaps &, GrGPArgs *, GrShaderVar localVar, const SkMatrix &localMatrix, UniformHandle *localMatrixUniform)
const T & cast() const
T * get() const
Definition SkRefCnt.h:303
G_BEGIN_DECLS G_MODULE_EXPORT FlValue * args

◆ setData()

void GrBitmapTextGeoProc::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 40 of file GrBitmapTextGeoProc.cpp.

42 {
43 const GrBitmapTextGeoProc& btgp = geomProc.cast<GrBitmapTextGeoProc>();
44 if (btgp.fColor != fColor && !btgp.hasVertexColor()) {
45 pdman.set4fv(fColorUniform, 1, btgp.fColor.vec());
46 fColor = btgp.fColor;
47 }
48
49 const SkISize& atlasDimensions = btgp.fAtlasDimensions;
50 SkASSERT(SkIsPow2(atlasDimensions.fWidth) && SkIsPow2(atlasDimensions.fHeight));
51
52 if (fAtlasDimensions != atlasDimensions) {
53 pdman.set2f(fAtlasDimensionsInvUniform,
54 1.0f / atlasDimensions.fWidth,
55 1.0f / atlasDimensions.fHeight);
56 fAtlasDimensions = atlasDimensions;
57 }
58
59 SetTransform(pdman, shaderCaps, fLocalMatrixUniform, btgp.fLocalMatrix, &fLocalMatrix);
60 fColorSpaceXformHelper.setData(pdman, btgp.fColorSpaceXform.get());
61 }
#define SkASSERT(cond)
Definition SkAssert.h:116
constexpr bool SkIsPow2(T value)
Definition SkMath.h:51
void setData(const GrGLSLProgramDataManager &pdman, const GrColorSpaceXform *colorSpaceXform)
static void SetTransform(const GrGLSLProgramDataManager &, const GrShaderCaps &, const UniformHandle &uniform, const SkMatrix &matrix, SkMatrix *state=nullptr)
int32_t fHeight
Definition SkSize.h:18
int32_t fWidth
Definition SkSize.h:17
const float * vec() const
Definition SkColor.h:308

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