Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(219)

Side by Side Diff: src/gpu/effects/GrTextureDomain.h

Issue 1434313002: Make all GrFragmentProcessors GL independent. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/gpu/effects/GrSimpleTextureEffect.cpp ('k') | src/gpu/effects/GrTextureDomain.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2012 Google Inc. 2 * Copyright 2012 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #ifndef GrTextureDomainEffect_DEFINED 8 #ifndef GrTextureDomainEffect_DEFINED
9 #define GrTextureDomainEffect_DEFINED 9 #define GrTextureDomainEffect_DEFINED
10 10
11 #include "GrSingleTextureEffect.h" 11 #include "GrSingleTextureEffect.h"
12 #include "gl/GrGLFragmentProcessor.h" 12 #include "glsl/GrGLSLFragmentProcessor.h"
13 #include "glsl/GrGLSLProgramDataManager.h" 13 #include "glsl/GrGLSLProgramDataManager.h"
14 14
15 class GrGLProgramBuilder; 15 class GrGLProgramBuilder;
16 class GrGLSLShaderBuilder; 16 class GrGLSLShaderBuilder;
17 class GrInvariantOutput; 17 class GrInvariantOutput;
18 class GrGLSLTextureSampler; 18 class GrGLSLTextureSampler;
19 struct SkRect; 19 struct SkRect;
20 20
21 /** 21 /**
22 * Limits a texture's lookup coordinates to a domain. Samples outside the domain are either clamped 22 * Limits a texture's lookup coordinates to a domain. Samples outside the domain are either clamped
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
82 (texelRect.fRight - inset) * wInv, 82 (texelRect.fRight - inset) * wInv,
83 (texelRect.fBottom - inset) * hInv 83 (texelRect.fBottom - inset) * hInv
84 ); 84 );
85 } 85 }
86 86
87 bool operator== (const GrTextureDomain& that) const { 87 bool operator== (const GrTextureDomain& that) const {
88 return fMode == that.fMode && (kIgnore_Mode == fMode || fDomain == that. fDomain); 88 return fMode == that.fMode && (kIgnore_Mode == fMode || fDomain == that. fDomain);
89 } 89 }
90 90
91 /** 91 /**
92 * A GrGLFragmentProcessor subclass that corresponds to a GrProcessor subcla ss that uses 92 * A GrGLSLFragmentProcessor subclass that corresponds to a GrProcessor subc lass that uses
93 * GrTextureDomain should include this helper. It generates the texture doma in GLSL, produces 93 * GrTextureDomain should include this helper. It generates the texture doma in GLSL, produces
94 * the part of the effect key that reflects the texture domain code, and per forms the uniform 94 * the part of the effect key that reflects the texture domain code, and per forms the uniform
95 * uploads necessary for texture domains. 95 * uploads necessary for texture domains.
96 */ 96 */
97 class GLDomain { 97 class GLDomain {
98 public: 98 public:
99 GLDomain() { 99 GLDomain() {
100 for (int i = 0; i < kPrevDomainCount; i++) { 100 for (int i = 0; i < kPrevDomainCount; i++) {
101 fPrevDomain[i] = SK_FloatNaN; 101 fPrevDomain[i] = SK_FloatNaN;
102 } 102 }
103 SkDEBUGCODE(fMode = (Mode) -1;) 103 SkDEBUGCODE(fMode = (Mode) -1;)
104 } 104 }
105 105
106 /** 106 /**
107 * Call this from GrGLFragmentProcessor::emitCode() to sample the textur e W.R.T. the domain 107 * Call this from GrGLSLFragmentProcessor::emitCode() to sample the text ure W.R.T. the
108 * and mode. 108 * domain and mode.
109 * 109 *
110 * @param outcolor name of vec4 variable to hold the sampled color. 110 * @param outcolor name of vec4 variable to hold the sampled color.
111 * @param inCoords name of vec2 variable containing the coords to be us ed with the domain. 111 * @param inCoords name of vec2 variable containing the coords to be us ed with the domain.
112 * It is assumed that this is a variable and not an exp ression. 112 * It is assumed that this is a variable and not an exp ression.
113 * @param inModulateColor if non-nullptr the sampled color will be mod ulated with this 113 * @param inModulateColor if non-nullptr the sampled color will be mod ulated with this
114 * expression before being written to outColor. 114 * expression before being written to outColor.
115 */ 115 */
116 void sampleTexture(GrGLSLShaderBuilder* builder, 116 void sampleTexture(GrGLSLShaderBuilder* builder,
117 const GrTextureDomain& textureDomain, 117 const GrTextureDomain& textureDomain,
118 const char* outColor, 118 const char* outColor,
119 const SkString& inCoords, 119 const SkString& inCoords,
120 const GrGLSLTextureSampler& sampler, 120 const GrGLSLTextureSampler& sampler,
121 const char* inModulateColor = nullptr); 121 const char* inModulateColor = nullptr);
122 122
123 /** 123 /**
124 * Call this from GrGLFragmentProcessor::setData() to upload uniforms ne cessary for the 124 * Call this from GrGLSLFragmentProcessor::setData() to upload uniforms necessary for the
125 * texture domain. The rectangle is automatically adjusted to account fo r the texture's 125 * texture domain. The rectangle is automatically adjusted to account fo r the texture's
126 * origin. 126 * origin.
127 */ 127 */
128 void setData(const GrGLSLProgramDataManager& pdman, const GrTextureDomai n& textureDomain, 128 void setData(const GrGLSLProgramDataManager& pdman, const GrTextureDomai n& textureDomain,
129 GrSurfaceOrigin textureOrigin); 129 GrSurfaceOrigin textureOrigin);
130 130
131 enum { 131 enum {
132 kDomainKeyBits = 2, // See DomainKey(). 132 kDomainKeyBits = 2, // See DomainKey().
133 }; 133 };
134 134
135 /** 135 /**
136 * GrGLFragmentProcessor::GenKey() must call this and include the return ed value in it's 136 * GrGLSLFragmentProcessor::GenKey() must call this and include the retu rned value in it's
137 * computed key. The returned will be limited to the lower kDomainKeyBit s bits. 137 * computed key. The returned will be limited to the lower kDomainKeyBit s bits.
138 */ 138 */
139 static uint32_t DomainKey(const GrTextureDomain& domain) { 139 static uint32_t DomainKey(const GrTextureDomain& domain) {
140 GR_STATIC_ASSERT(kModeCount <= 4); 140 GR_STATIC_ASSERT(kModeCount <= 4);
141 return domain.mode(); 141 return domain.mode();
142 } 142 }
143 143
144 private: 144 private:
145 static const int kPrevDomainCount = 4; 145 static const int kPrevDomainCount = 4;
146 SkDEBUGCODE(Mode fMode;) 146 SkDEBUGCODE(Mode fMode;)
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
180 GrTextureDomain fTextureDomain; 180 GrTextureDomain fTextureDomain;
181 181
182 private: 182 private:
183 GrTextureDomainEffect(GrTexture*, 183 GrTextureDomainEffect(GrTexture*,
184 const SkMatrix&, 184 const SkMatrix&,
185 const SkRect& domain, 185 const SkRect& domain,
186 GrTextureDomain::Mode, 186 GrTextureDomain::Mode,
187 GrTextureParams::FilterMode, 187 GrTextureParams::FilterMode,
188 GrCoordSet); 188 GrCoordSet);
189 189
190 GrGLFragmentProcessor* onCreateGLInstance() const override; 190 GrGLSLFragmentProcessor* onCreateGLInstance() const override;
191 191
192 void onGetGLProcessorKey(const GrGLSLCaps&, GrProcessorKeyBuilder*) const ov erride; 192 void onGetGLProcessorKey(const GrGLSLCaps&, GrProcessorKeyBuilder*) const ov erride;
193 193
194 bool onIsEqual(const GrFragmentProcessor&) const override; 194 bool onIsEqual(const GrFragmentProcessor&) const override;
195 195
196 void onComputeInvariantOutput(GrInvariantOutput* inout) const override; 196 void onComputeInvariantOutput(GrInvariantOutput* inout) const override;
197 197
198 GR_DECLARE_FRAGMENT_PROCESSOR_TEST; 198 GR_DECLARE_FRAGMENT_PROCESSOR_TEST;
199 199
200 typedef GrSingleTextureEffect INHERITED; 200 typedef GrSingleTextureEffect INHERITED;
201 }; 201 };
202 202
203 #endif 203 #endif
OLDNEW
« no previous file with comments | « src/gpu/effects/GrSimpleTextureEffect.cpp ('k') | src/gpu/effects/GrTextureDomain.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698