diff options
author | joshualitt <joshualitt@chromium.org> | 2014-12-03 06:24:10 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-12-03 06:24:10 -0800 |
commit | 2dd1ae016d7f297b433c3ea3a771ef8e01657c1f (patch) | |
tree | 96aa03d4b4b1802490cb5b769627b75f3de4a470 /src/gpu/effects/GrCustomCoordsTextureEffect.cpp | |
parent | 960fb50a1a7ac76fd51e22983812f26bfffa6d1e (diff) |
First step to moving vertex attributes to the geometryProcessor
BUG=skia:
Review URL: https://codereview.chromium.org/761563002
Diffstat (limited to 'src/gpu/effects/GrCustomCoordsTextureEffect.cpp')
-rw-r--r-- | src/gpu/effects/GrCustomCoordsTextureEffect.cpp | 53 |
1 files changed, 35 insertions, 18 deletions
diff --git a/src/gpu/effects/GrCustomCoordsTextureEffect.cpp b/src/gpu/effects/GrCustomCoordsTextureEffect.cpp index f61a37bb6f..45c3008889 100644 --- a/src/gpu/effects/GrCustomCoordsTextureEffect.cpp +++ b/src/gpu/effects/GrCustomCoordsTextureEffect.cpp @@ -21,33 +21,44 @@ public: : INHERITED (factory) {} virtual void emitCode(const EmitArgs& args) SK_OVERRIDE { - const GrCustomCoordsTextureEffect& customCoordsTextureEffect = + const GrCustomCoordsTextureEffect& cte = args.fGP.cast<GrCustomCoordsTextureEffect>(); - SkASSERT(1 == customCoordsTextureEffect.getVertexAttribs().count()); + + GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder(); GrGLVertToFrag v(kVec2f_GrSLType); args.fPB->addVarying("TextureCoords", &v); + vsBuilder->codeAppendf("%s = %s;", v.vsOut(), cte.inTextureCoords()->fName); - GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder(); - const GrShaderVar& inTextureCoords = customCoordsTextureEffect.inTextureCoords(); - vsBuilder->codeAppendf("%s = %s;", v.vsOut(), inTextureCoords.c_str()); + if (cte.inColor()) { + args.fPB->addPassThroughAttribute(cte.inColor(), args.fOutputColor); + } + + // setup output coords + vsBuilder->codeAppendf("%s = %s;", vsBuilder->positionCoords(), cte.inPosition()->fName); + vsBuilder->codeAppendf("%s = %s;", vsBuilder->localCoords(), cte.inPosition()->fName); // setup position varying vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);", vsBuilder->glPosition(), - vsBuilder->uViewM(), vsBuilder->inPosition()); + vsBuilder->uViewM(), cte.inPosition()->fName); GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder(); - fsBuilder->codeAppendf("%s = ", args.fOutput); - fsBuilder->appendTextureLookupAndModulate(args.fInput, - args.fSamplers[0], - v.fsIn(), - kVec2f_GrSLType); + fsBuilder->codeAppendf("%s = ", args.fOutputCoverage); + fsBuilder->appendTextureLookup(args.fSamplers[0], v.fsIn(), kVec2f_GrSLType); fsBuilder->codeAppend(";"); } virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_OVERRIDE {} + static inline void GenKey(const GrProcessor& proc, const GrGLCaps&, + GrProcessorKeyBuilder* b) { + const GrCustomCoordsTextureEffect& gp = proc.cast<GrCustomCoordsTextureEffect>(); + + b->add32(SkToBool(gp.inColor())); + } + + private: typedef GrGLGeometryProcessor INHERITED; }; @@ -55,16 +66,22 @@ private: /////////////////////////////////////////////////////////////////////////////// GrCustomCoordsTextureEffect::GrCustomCoordsTextureEffect(GrTexture* texture, - const GrTextureParams& params) - : fTextureAccess(texture, params) - , fInTextureCoords(this->addVertexAttrib(GrShaderVar("inTextureCoords", - kVec2f_GrSLType, - GrShaderVar::kAttribute_TypeModifier))) { + const GrTextureParams& params, + bool hasColor) + : fTextureAccess(texture, params), fInColor(NULL) { + fInPosition = &this->addVertexAttrib(GrAttribute("inPosition", kVec2f_GrVertexAttribType)); + if (hasColor) { + fInColor = &this->addVertexAttrib(GrAttribute("inColor", kVec4ub_GrVertexAttribType)); + this->setHasVertexColor(); + } + fInTextureCoords = &this->addVertexAttrib(GrAttribute("inTextureCoords", + kVec2f_GrVertexAttribType)); this->addTextureAccess(&fTextureAccess); } bool GrCustomCoordsTextureEffect::onIsEqual(const GrGeometryProcessor& other) const { - return true; + const GrCustomCoordsTextureEffect& gp = other.cast<GrCustomCoordsTextureEffect>(); + return SkToBool(this->inColor()) == SkToBool(gp.inColor()); } void GrCustomCoordsTextureEffect::onComputeInvariantOutput(GrInvariantOutput* inout) const { @@ -103,5 +120,5 @@ GrGeometryProcessor* GrCustomCoordsTextureEffect::TestCreate(SkRandom* random, GrTextureParams params(tileModes, random->nextBool() ? GrTextureParams::kBilerp_FilterMode : GrTextureParams::kNone_FilterMode); - return GrCustomCoordsTextureEffect::Create(textures[texIdx], params); + return GrCustomCoordsTextureEffect::Create(textures[texIdx], params, random->nextBool()); } |