• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2012 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 #include "GrSimpleTextureEffect.h"
9 #include "GrInvariantOutput.h"
10 #include "GrTexture.h"
11 #include "glsl/GrGLSLFragmentProcessor.h"
12 #include "glsl/GrGLSLFragmentShaderBuilder.h"
13 
14 class GrGLSimpleTextureEffect : public GrGLSLFragmentProcessor {
15 public:
emitCode(EmitArgs & args)16     void emitCode(EmitArgs& args) override {
17         GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder;
18         fragBuilder->codeAppendf("%s = ", args.fOutputColor);
19         fragBuilder->appendTextureLookupAndModulate(args.fInputColor,
20                                                   args.fSamplers[0],
21                                                   args.fCoords[0].c_str(),
22                                                   args.fCoords[0].getType());
23         fragBuilder->codeAppend(";");
24     }
25 
26 private:
27     typedef GrGLSLFragmentProcessor INHERITED;
28 };
29 
30 ///////////////////////////////////////////////////////////////////////////////
31 
onComputeInvariantOutput(GrInvariantOutput * inout) const32 void GrSimpleTextureEffect::onComputeInvariantOutput(GrInvariantOutput* inout) const {
33     this->updateInvariantOutputForModulation(inout);
34 }
35 
onGetGLSLProcessorKey(const GrGLSLCaps & caps,GrProcessorKeyBuilder * b) const36 void GrSimpleTextureEffect::onGetGLSLProcessorKey(const GrGLSLCaps& caps,
37                                                   GrProcessorKeyBuilder* b) const {
38     GrGLSimpleTextureEffect::GenKey(*this, caps, b);
39 }
40 
onCreateGLSLInstance() const41 GrGLSLFragmentProcessor* GrSimpleTextureEffect::onCreateGLSLInstance() const  {
42     return new GrGLSimpleTextureEffect;
43 }
44 
45 ///////////////////////////////////////////////////////////////////////////////
46 
47 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrSimpleTextureEffect);
48 
TestCreate(GrProcessorTestData * d)49 const GrFragmentProcessor* GrSimpleTextureEffect::TestCreate(GrProcessorTestData* d) {
50     int texIdx = d->fRandom->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx :
51                                           GrProcessorUnitTest::kAlphaTextureIdx;
52     static const SkShader::TileMode kTileModes[] = {
53         SkShader::kClamp_TileMode,
54         SkShader::kRepeat_TileMode,
55         SkShader::kMirror_TileMode,
56     };
57     SkShader::TileMode tileModes[] = {
58         kTileModes[d->fRandom->nextULessThan(SK_ARRAY_COUNT(kTileModes))],
59         kTileModes[d->fRandom->nextULessThan(SK_ARRAY_COUNT(kTileModes))],
60     };
61     GrTextureParams params(tileModes, d->fRandom->nextBool() ? GrTextureParams::kBilerp_FilterMode :
62                                                                GrTextureParams::kNone_FilterMode);
63 
64     static const GrCoordSet kCoordSets[] = {
65         kLocal_GrCoordSet,
66         kDevice_GrCoordSet
67     };
68     GrCoordSet coordSet = kCoordSets[d->fRandom->nextULessThan(SK_ARRAY_COUNT(kCoordSets))];
69 
70     const SkMatrix& matrix = GrTest::TestMatrix(d->fRandom);
71     return GrSimpleTextureEffect::Create(d->fTextures[texIdx], matrix, coordSet);
72 }
73