1 /* 2 * Copyright 2017 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 /************************************************************************************************** 9 *** This file was autogenerated from GrSimpleTextureEffect.fp; do not modify. 10 **************************************************************************************************/ 11 #include "GrSimpleTextureEffect.h" 12 #include "glsl/GrGLSLFragmentProcessor.h" 13 #include "glsl/GrGLSLFragmentShaderBuilder.h" 14 #include "glsl/GrGLSLProgramBuilder.h" 15 #include "GrTexture.h" 16 #include "SkSLCPP.h" 17 #include "SkSLUtil.h" 18 class GrGLSLSimpleTextureEffect : public GrGLSLFragmentProcessor { 19 public: 20 GrGLSLSimpleTextureEffect() {} 21 void emitCode(EmitArgs& args) override { 22 GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder; 23 const GrSimpleTextureEffect& _outer = args.fFp.cast<GrSimpleTextureEffect>(); 24 (void)_outer; 25 auto matrix = _outer.matrix(); 26 (void)matrix; 27 SkString sk_TransformedCoords2D_0 = fragBuilder->ensureCoords2D(args.fTransformedCoords[0]); 28 fragBuilder->codeAppendf( 29 "%s = %s * texture(%s, %s).%s;\n", args.fOutputColor, args.fInputColor, 30 fragBuilder->getProgramBuilder()->samplerVariable(args.fTexSamplers[0]).c_str(), 31 sk_TransformedCoords2D_0.c_str(), 32 fragBuilder->getProgramBuilder()->samplerSwizzle(args.fTexSamplers[0]).c_str()); 33 } 34 35 private: 36 void onSetData(const GrGLSLProgramDataManager& pdman, 37 const GrFragmentProcessor& _proc) override {} 38 }; 39 GrGLSLFragmentProcessor* GrSimpleTextureEffect::onCreateGLSLInstance() const { 40 return new GrGLSLSimpleTextureEffect(); 41 } 42 void GrSimpleTextureEffect::onGetGLSLProcessorKey(const GrShaderCaps& caps, 43 GrProcessorKeyBuilder* b) const {} 44 bool GrSimpleTextureEffect::onIsEqual(const GrFragmentProcessor& other) const { 45 const GrSimpleTextureEffect& that = other.cast<GrSimpleTextureEffect>(); 46 (void)that; 47 if (fImage != that.fImage) return false; 48 if (fMatrix != that.fMatrix) return false; 49 return true; 50 } 51 GrSimpleTextureEffect::GrSimpleTextureEffect(const GrSimpleTextureEffect& src) 52 : INHERITED(kGrSimpleTextureEffect_ClassID, src.optimizationFlags()) 53 , fImage(src.fImage) 54 , fMatrix(src.fMatrix) 55 , fImageCoordTransform(src.fImageCoordTransform) { 56 this->setTextureSamplerCnt(1); 57 this->addCoordTransform(&fImageCoordTransform); 58 } 59 std::unique_ptr<GrFragmentProcessor> GrSimpleTextureEffect::clone() const { 60 return std::unique_ptr<GrFragmentProcessor>(new GrSimpleTextureEffect(*this)); 61 } 62 const GrFragmentProcessor::TextureSampler& GrSimpleTextureEffect::onTextureSampler( 63 int index) const { 64 return IthTextureSampler(index, fImage); 65 } 66 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrSimpleTextureEffect); 67 #if GR_TEST_UTILS 68 std::unique_ptr<GrFragmentProcessor> GrSimpleTextureEffect::TestCreate( 69 GrProcessorTestData* testData) { 70 int texIdx = testData->fRandom->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx 71 : GrProcessorUnitTest::kAlphaTextureIdx; 72 GrSamplerState::WrapMode wrapModes[2]; 73 GrTest::TestWrapModes(testData->fRandom, wrapModes); 74 if (!testData->caps()->npotTextureTileSupport()) { 75 // Performing repeat sampling on npot textures will cause asserts on HW 76 // that lacks support. 77 wrapModes[0] = GrSamplerState::WrapMode::kClamp; 78 wrapModes[1] = GrSamplerState::WrapMode::kClamp; 79 } 80 81 GrSamplerState params(wrapModes, testData->fRandom->nextBool() 82 ? GrSamplerState::Filter::kBilerp 83 : GrSamplerState::Filter::kNearest); 84 85 const SkMatrix& matrix = GrTest::TestMatrix(testData->fRandom); 86 return GrSimpleTextureEffect::Make(testData->textureProxy(texIdx), matrix, params); 87 } 88 #endif 89