GrSingleTextureEffect.cpp revision 1ce49fc91714ce8974d11246d29ebe7b97b5fe98
1d0c1a06cb98dd4a009dfa79e37ba6ca23a8c180btomhudson@google.com/* 2d0c1a06cb98dd4a009dfa79e37ba6ca23a8c180btomhudson@google.com * Copyright 2012 Google Inc. 3d0c1a06cb98dd4a009dfa79e37ba6ca23a8c180btomhudson@google.com * 4d0c1a06cb98dd4a009dfa79e37ba6ca23a8c180btomhudson@google.com * Use of this source code is governed by a BSD-style license that can be 5d0c1a06cb98dd4a009dfa79e37ba6ca23a8c180btomhudson@google.com * found in the LICENSE file. 6d0c1a06cb98dd4a009dfa79e37ba6ca23a8c180btomhudson@google.com */ 7d0c1a06cb98dd4a009dfa79e37ba6ca23a8c180btomhudson@google.com 8d0c1a06cb98dd4a009dfa79e37ba6ca23a8c180btomhudson@google.com#include "effects/GrSingleTextureEffect.h" 9aa72eab5d82d4c2aa9f6f41755a001282443b042tomhudson@google.com#include "gl/GrGLProgramStage.h" 10aa72eab5d82d4c2aa9f6f41755a001282443b042tomhudson@google.com#include "gl/GrGLSL.h" 11aa72eab5d82d4c2aa9f6f41755a001282443b042tomhudson@google.com#include "gl/GrGLTexture.h" 12aa72eab5d82d4c2aa9f6f41755a001282443b042tomhudson@google.com#include "GrProgramStageFactory.h" 13d0c1a06cb98dd4a009dfa79e37ba6ca23a8c180btomhudson@google.com#include "GrTexture.h" 14d0c1a06cb98dd4a009dfa79e37ba6ca23a8c180btomhudson@google.com 15aa72eab5d82d4c2aa9f6f41755a001282443b042tomhudson@google.comclass GrGLSingleTextureEffect : public GrGLProgramStage { 16aa72eab5d82d4c2aa9f6f41755a001282443b042tomhudson@google.compublic: 17aa72eab5d82d4c2aa9f6f41755a001282443b042tomhudson@google.com GrGLSingleTextureEffect(const GrProgramStageFactory& factory, 18aa72eab5d82d4c2aa9f6f41755a001282443b042tomhudson@google.com const GrCustomStage& stage) : INHERITED (factory) { } 19aa72eab5d82d4c2aa9f6f41755a001282443b042tomhudson@google.com 20aa72eab5d82d4c2aa9f6f41755a001282443b042tomhudson@google.com virtual void emitVS(GrGLShaderBuilder* builder, 21aa72eab5d82d4c2aa9f6f41755a001282443b042tomhudson@google.com const char* vertexCoords) SK_OVERRIDE { } 22aa72eab5d82d4c2aa9f6f41755a001282443b042tomhudson@google.com virtual void emitFS(GrGLShaderBuilder* builder, 23aa72eab5d82d4c2aa9f6f41755a001282443b042tomhudson@google.com const char* outputColor, 24aa72eab5d82d4c2aa9f6f41755a001282443b042tomhudson@google.com const char* inputColor, 25f06df1bb9ab201a78bfc906a9e95326c6e15a119bsalomon@google.com const TextureSamplerArray& samplers) SK_OVERRIDE { 26868a8e7fc83e9ac6ee1418e75b84a0595605626cbsalomon@google.com builder->fFSCode.appendf("\t%s = ", outputColor); 27f06df1bb9ab201a78bfc906a9e95326c6e15a119bsalomon@google.com builder->appendTextureLookupAndModulate(&builder->fFSCode, inputColor, samplers[0]); 28868a8e7fc83e9ac6ee1418e75b84a0595605626cbsalomon@google.com builder->fFSCode.append(";\n"); 29aa72eab5d82d4c2aa9f6f41755a001282443b042tomhudson@google.com } 30aa72eab5d82d4c2aa9f6f41755a001282443b042tomhudson@google.com 31a5e65ec434fed44dc616e4f64950b835b541181btwiz@google.com static inline StageKey GenKey(const GrCustomStage&, const GrGLCaps&) { return 0; } 32aa72eab5d82d4c2aa9f6f41755a001282443b042tomhudson@google.com 33aa72eab5d82d4c2aa9f6f41755a001282443b042tomhudson@google.comprivate: 34aa72eab5d82d4c2aa9f6f41755a001282443b042tomhudson@google.com 35aa72eab5d82d4c2aa9f6f41755a001282443b042tomhudson@google.com typedef GrGLProgramStage INHERITED; 36aa72eab5d82d4c2aa9f6f41755a001282443b042tomhudson@google.com}; 37aa72eab5d82d4c2aa9f6f41755a001282443b042tomhudson@google.com 38aa72eab5d82d4c2aa9f6f41755a001282443b042tomhudson@google.com/////////////////////////////////////////////////////////////////////////////// 39aa72eab5d82d4c2aa9f6f41755a001282443b042tomhudson@google.com 40d0c1a06cb98dd4a009dfa79e37ba6ca23a8c180btomhudson@google.comGrSingleTextureEffect::GrSingleTextureEffect(GrTexture* texture) 416d003d1ddced3e71684b8b3785d1e5a16255688dbsalomon@google.com : fTextureAccess(texture) { 42d0c1a06cb98dd4a009dfa79e37ba6ca23a8c180btomhudson@google.com} 43d0c1a06cb98dd4a009dfa79e37ba6ca23a8c180btomhudson@google.com 441ce49fc91714ce8974d11246d29ebe7b97b5fe98bsalomon@google.comGrSingleTextureEffect::GrSingleTextureEffect(GrTexture* texture, bool bilerp) 451ce49fc91714ce8974d11246d29ebe7b97b5fe98bsalomon@google.com : fTextureAccess(texture, bilerp) { 461ce49fc91714ce8974d11246d29ebe7b97b5fe98bsalomon@google.com} 471ce49fc91714ce8974d11246d29ebe7b97b5fe98bsalomon@google.com 481ce49fc91714ce8974d11246d29ebe7b97b5fe98bsalomon@google.comGrSingleTextureEffect::GrSingleTextureEffect(GrTexture* texture, const GrTextureParams& params) 491ce49fc91714ce8974d11246d29ebe7b97b5fe98bsalomon@google.com : fTextureAccess(texture, params) { 501ce49fc91714ce8974d11246d29ebe7b97b5fe98bsalomon@google.com} 511ce49fc91714ce8974d11246d29ebe7b97b5fe98bsalomon@google.com 52d0c1a06cb98dd4a009dfa79e37ba6ca23a8c180btomhudson@google.comGrSingleTextureEffect::~GrSingleTextureEffect() { 53d0c1a06cb98dd4a009dfa79e37ba6ca23a8c180btomhudson@google.com} 54d0c1a06cb98dd4a009dfa79e37ba6ca23a8c180btomhudson@google.com 556d003d1ddced3e71684b8b3785d1e5a16255688dbsalomon@google.comint GrSingleTextureEffect::numTextures() const { 56d0c1a06cb98dd4a009dfa79e37ba6ca23a8c180btomhudson@google.com return 1; 57d0c1a06cb98dd4a009dfa79e37ba6ca23a8c180btomhudson@google.com} 58d0c1a06cb98dd4a009dfa79e37ba6ca23a8c180btomhudson@google.com 596d003d1ddced3e71684b8b3785d1e5a16255688dbsalomon@google.comconst GrTextureAccess& GrSingleTextureEffect::textureAccess(int index) const { 60d0c1a06cb98dd4a009dfa79e37ba6ca23a8c180btomhudson@google.com GrAssert(0 == index); 616d003d1ddced3e71684b8b3785d1e5a16255688dbsalomon@google.com return fTextureAccess; 62d0c1a06cb98dd4a009dfa79e37ba6ca23a8c180btomhudson@google.com} 63d0c1a06cb98dd4a009dfa79e37ba6ca23a8c180btomhudson@google.com 64aa72eab5d82d4c2aa9f6f41755a001282443b042tomhudson@google.comconst GrProgramStageFactory& GrSingleTextureEffect::getFactory() const { 65aa72eab5d82d4c2aa9f6f41755a001282443b042tomhudson@google.com return GrTProgramStageFactory<GrSingleTextureEffect>::getInstance(); 66aa72eab5d82d4c2aa9f6f41755a001282443b042tomhudson@google.com} 670a7672f85ef7655b343679609d02018f83fcfc23bsalomon@google.com 680a7672f85ef7655b343679609d02018f83fcfc23bsalomon@google.com/////////////////////////////////////////////////////////////////////////////// 690a7672f85ef7655b343679609d02018f83fcfc23bsalomon@google.com 700a7672f85ef7655b343679609d02018f83fcfc23bsalomon@google.comGR_DEFINE_CUSTOM_STAGE_TEST(GrSingleTextureEffect); 710a7672f85ef7655b343679609d02018f83fcfc23bsalomon@google.com 720a7672f85ef7655b343679609d02018f83fcfc23bsalomon@google.comGrCustomStage* GrSingleTextureEffect::TestCreate(SkRandom* random, 730a7672f85ef7655b343679609d02018f83fcfc23bsalomon@google.com GrContext* context, 740a7672f85ef7655b343679609d02018f83fcfc23bsalomon@google.com GrTexture* textures[]) { 758d3d210e74e3058f28eb2e59b71cae717ed65996bsalomon@google.com int texIdx = random->nextBool() ? GrCustomStageUnitTest::kSkiaPMTextureIdx : 768d3d210e74e3058f28eb2e59b71cae717ed65996bsalomon@google.com GrCustomStageUnitTest::kAlphaTextureIdx; 770a7672f85ef7655b343679609d02018f83fcfc23bsalomon@google.com return SkNEW_ARGS(GrSingleTextureEffect, (textures[texIdx])); 780a7672f85ef7655b343679609d02018f83fcfc23bsalomon@google.com} 79