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

Side by Side Diff: src/gpu/gl/GrGLShaderBuilder.h

Issue 25474006: Move VertexBuilder to a GrGLFullShaderBuilder subclass (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Created 7 years, 2 months 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 | Annotate | Revision Log
« no previous file with comments | « src/gpu/gl/GrGLProgramEffects.cpp ('k') | src/gpu/gl/GrGLShaderBuilder.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 GrGLShaderBuilder_DEFINED 8 #ifndef GrGLShaderBuilder_DEFINED
9 #define GrGLShaderBuilder_DEFINED 9 #define GrGLShaderBuilder_DEFINED
10 10
(...skipping 15 matching lines...) Expand all
26 /** 26 /**
27 Contains all the incremental state of a shader as it is being built,as well as helpers to 27 Contains all the incremental state of a shader as it is being built,as well as helpers to
28 manipulate that state. 28 manipulate that state.
29 */ 29 */
30 class GrGLShaderBuilder { 30 class GrGLShaderBuilder {
31 public: 31 public:
32 typedef GrTAllocator<GrGLShaderVar> VarArray; 32 typedef GrTAllocator<GrGLShaderVar> VarArray;
33 typedef GrBackendEffectFactory::EffectKey EffectKey; 33 typedef GrBackendEffectFactory::EffectKey EffectKey;
34 typedef GrGLProgramEffects::TextureSampler TextureSampler; 34 typedef GrGLProgramEffects::TextureSampler TextureSampler;
35 typedef GrGLProgramEffects::TransformedCoordsArray TransformedCoordsArray; 35 typedef GrGLProgramEffects::TransformedCoordsArray TransformedCoordsArray;
36 typedef GrGLUniformManager::BuilderUniform BuilderUniform;
36 37
37 enum ShaderVisibility { 38 enum ShaderVisibility {
38 kVertex_Visibility = 0x1, 39 kVertex_Visibility = 0x1,
39 kGeometry_Visibility = 0x2, 40 kGeometry_Visibility = 0x2,
40 kFragment_Visibility = 0x4, 41 kFragment_Visibility = 0x4,
41 }; 42 };
42 43
43 GrGLShaderBuilder(GrGpuGL*, 44 GrGLShaderBuilder(GrGpuGL*, GrGLUniformManager&, const GrGLProgramDesc&);
44 GrGLUniformManager&, 45 virtual ~GrGLShaderBuilder() {}
45 const GrGLProgramDesc&,
46 bool needsVertexShader);
47 46
48 /** 47 /**
49 * Use of these features may require a GLSL extension to be enabled. Shaders may not compile 48 * Use of these features may require a GLSL extension to be enabled. Shaders may not compile
50 * if code is added that uses one of these features without calling enableFe ature() 49 * if code is added that uses one of these features without calling enableFe ature()
51 */ 50 */
52 enum GLSLFeature { 51 enum GLSLFeature {
53 kStandardDerivatives_GLSLFeature = 0, 52 kStandardDerivatives_GLSLFeature = 0,
54 53
55 kLastGLSLFeature = kStandardDerivatives_GLSLFeature 54 kLastGLSLFeature = kStandardDerivatives_GLSLFeature
56 }; 55 };
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
97 GrSLType coordType = kVec2f_GrSLType); 96 GrSLType coordType = kVec2f_GrSLType);
98 97
99 /** Emits a helper function outside of main() in the fragment shader. */ 98 /** Emits a helper function outside of main() in the fragment shader. */
100 void fsEmitFunction(GrSLType returnType, 99 void fsEmitFunction(GrSLType returnType,
101 const char* name, 100 const char* name,
102 int argCnt, 101 int argCnt,
103 const GrGLShaderVar* args, 102 const GrGLShaderVar* args,
104 const char* body, 103 const char* body,
105 SkString* outName); 104 SkString* outName);
106 105
107 /** Add input/output variable declarations (i.e. 'varying') to the fragment shader. */
108 GrGLShaderVar& fsInputAppend() { return fFSInputs.push_back(); }
109
110 typedef uint8_t DstReadKey; 106 typedef uint8_t DstReadKey;
111 typedef uint8_t FragPosKey; 107 typedef uint8_t FragPosKey;
112 108
113 /** Returns a key for adding code to read the copy-of-dst color in service of effects that 109 /** Returns a key for adding code to read the copy-of-dst color in service of effects that
114 require reading the dst. It must not return 0 because 0 indicates that there is no dst 110 require reading the dst. It must not return 0 because 0 indicates that there is no dst
115 copy read at all (in which case this function should not be called). */ 111 copy read at all (in which case this function should not be called). */
116 static DstReadKey KeyForDstRead(const GrTexture* dstCopy, const GrGLCaps&); 112 static DstReadKey KeyForDstRead(const GrTexture* dstCopy, const GrGLCaps&);
117 113
118 /** Returns a key for reading the fragment location. This should only be cal led if there is an 114 /** Returns a key for reading the fragment location. This should only be cal led if there is an
119 effect that will requires the fragment position. If the fragment positio n is not required, 115 effect that will requires the fragment position. If the fragment positio n is not required,
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 163
168 /** Returns the color of the destination pixel. This may be NULL if no effec t advertised 164 /** Returns the color of the destination pixel. This may be NULL if no effec t advertised
169 that it will read the destination. */ 165 that it will read the destination. */
170 const char* dstColor(); 166 const char* dstColor();
171 167
172 /** 168 /**
173 * Interfaces used by GrGLProgram. 169 * Interfaces used by GrGLProgram.
174 * TODO: These are used by GrGLProgram to insert a mode color filter. Remove these when the 170 * TODO: These are used by GrGLProgram to insert a mode color filter. Remove these when the
175 * color filter is expressed as a GrEffect. 171 * color filter is expressed as a GrEffect.
176 */ 172 */
177 const SkString& getInputColor() const { return fInputColor; } 173 const SkString& getInputColor() const {
178 GrSLConstantVec getKnownColorValue() const { return fKnownColorValue; } 174 SkASSERT(fInputColor.isEmpty() != (kNone_GrSLConstantVec == fKnownColorV alue));
179 const SkString& getInputCoverage() const { return fInputCoverage; } 175 return fInputColor;
180 GrSLConstantVec getKnownCoverageValue() const { return fKnownCoverageValue; } 176 }
177 GrSLConstantVec getKnownColorValue() const {
178 SkASSERT(fInputColor.isEmpty() != (kNone_GrSLConstantVec == fKnownColorV alue));
179 return fKnownColorValue;
180 }
181 const SkString& getInputCoverage() const {
182 SkASSERT(fInputCoverage.isEmpty() != (kNone_GrSLConstantVec == fKnownCov erageValue));
183 return fInputCoverage;
184 }
185 GrSLConstantVec getKnownCoverageValue() const {
186 SkASSERT(fInputCoverage.isEmpty() != (kNone_GrSLConstantVec == fKnownCov erageValue));
187 return fKnownCoverageValue;
188 }
181 189
182 /** 190 /**
183 * Adds code for effects and returns a GrGLProgramEffects* object. The calle r is responsible for 191 * Adds code for effects and returns a GrGLProgramEffects* object. The calle r is responsible for
184 * deleting it when finished. effectStages contains the effects to add. effe ctKeys[i] is the key 192 * deleting it when finished. effectStages contains the effects to add. effe ctKeys[i] is the key
185 * generated from effectStages[i]. inOutFSColor specifies the input color to the first stage and 193 * generated from effectStages[i]. inOutFSColor specifies the input color to the first stage and
186 * is updated to be the output color of the last stage. fsInOutColorKnownVal ue specifies whether 194 * is updated to be the output color of the last stage. fsInOutColorKnownVal ue specifies whether
187 * the input color has a known constant value and is updated to refer to the status of the 195 * the input color has a known constant value and is updated to refer to the status of the
188 * output color. The handles to texture samplers for effectStage[i] are adde d to 196 * output color. The handles to texture samplers for effectStage[i] are adde d to
189 * effectSamplerHandles[i]. 197 * effectSamplerHandles[i].
190 */ 198 */
191 GrGLProgramEffects* createAndEmitEffects(const GrEffectStage* effectStages[] , 199 virtual GrGLProgramEffects* createAndEmitEffects(const GrEffectStage* effect Stages[],
192 const EffectKey effectKeys[], 200 const EffectKey effectKeys[ ],
193 int effectCnt, 201 int effectCnt,
194 SkString* inOutFSColor, 202 SkString* inOutFSColor,
195 GrSLConstantVec* fsInOutColorKnownV alue); 203 GrSLConstantVec* fsInOutCol orKnownValue) = 0;
196 204
197 const char* getColorOutputName() const; 205 const char* getColorOutputName() const;
198 const char* enableSecondaryOutput(); 206 const char* enableSecondaryOutput();
199 207
200 GrGLUniformManager::UniformHandle getRTHeightUniform() const { return fRTHei ghtUniform; } 208 GrGLUniformManager::UniformHandle getRTHeightUniform() const { return fRTHei ghtUniform; }
201 GrGLUniformManager::UniformHandle getDstCopyTopLeftUniform() const { 209 GrGLUniformManager::UniformHandle getDstCopyTopLeftUniform() const {
202 return fDstCopyTopLeftUniform; 210 return fDstCopyTopLeftUniform;
203 } 211 }
204 GrGLUniformManager::UniformHandle getDstCopyScaleUniform() const { 212 GrGLUniformManager::UniformHandle getDstCopyScaleUniform() const {
205 return fDstCopyScaleUniform; 213 return fDstCopyScaleUniform;
206 } 214 }
207 GrGLUniformManager::UniformHandle getColorUniform() const { return fColorUni form; } 215 GrGLUniformManager::UniformHandle getColorUniform() const { return fColorUni form; }
208 GrGLUniformManager::UniformHandle getCoverageUniform() const { return fCover ageUniform; } 216 GrGLUniformManager::UniformHandle getCoverageUniform() const { return fCover ageUniform; }
209 GrGLUniformManager::UniformHandle getDstCopySamplerUniform() const { 217 GrGLUniformManager::UniformHandle getDstCopySamplerUniform() const {
210 return fDstCopySamplerUniform; 218 return fDstCopySamplerUniform;
211 } 219 }
212 220
213 /** Helper class used to build the vertex and geometry shaders. This functio nality
214 is kept separate from the rest of GrGLShaderBuilder to allow for shaders programs
215 that only use the fragment shader. */
216 class VertexBuilder {
217 public:
218 VertexBuilder(GrGLShaderBuilder* parent, GrGpuGL* gpu, const GrGLProgram Desc&);
219
220 /**
221 * Called by GrGLEffects to add code to one of the shaders.
222 */
223 void vsCodeAppendf(const char format[], ...) SK_PRINTF_LIKE(2, 3) {
224 va_list args;
225 va_start(args, format);
226 fVSCode.appendf(format, args);
227 va_end(args);
228 }
229
230 void vsCodeAppend(const char* str) { fVSCode.append(str); }
231
232 /** Add a vertex attribute to the current program that is passed in from the vertex data.
233 Returns false if the attribute was already there, true otherwise. */
234 bool addAttribute(GrSLType type, const char* name);
235
236 /** Add a varying variable to the current program to pass values between vertex and fragment
237 shaders. If the last two parameters are non-NULL, they are filled in with the name
238 generated. */
239 void addVarying(GrSLType type,
240 const char* name,
241 const char** vsOutName = NULL,
242 const char** fsInName = NULL);
243
244 /** Returns a vertex attribute that represents the vertex position in th e VS. This is the
245 pre-matrix position and is commonly used by effects to compute textu re coords via a matrix.
246 */
247 const GrGLShaderVar& positionAttribute() const { return *fPositionVar; }
248
249 /** Returns a vertex attribute that represents the local coords in the V S. This may be the same
250 as positionAttribute() or it may not be. It depends upon whether the rendering code
251 specified explicit local coords or not in the GrDrawState. */
252 const GrGLShaderVar& localCoordsAttribute() const { return *fLocalCoords Var; }
253
254 /**
255 * Are explicit local coordinates provided as input to the vertex shader .
256 */
257 bool hasExplicitLocalCoords() const { return (fLocalCoordsVar != fPositi onVar); }
258
259 bool addEffectAttribute(int attributeIndex, GrSLType type, const SkStrin g& name);
260 const SkString* getEffectAttributeName(int attributeIndex) const;
261
262 GrGLUniformManager::UniformHandle getViewMatrixUniform() const {
263 return fViewMatrixUniform;
264 }
265
266 bool compileAndAttachShaders(GrGLuint programId) const;
267 void bindProgramLocations(GrGLuint programId) const;
268
269 private:
270 GrGLShaderBuilder* fParent;
271 GrGpuGL* fGpu;
272 const GrGLProgramDesc& fDesc;
273 VarArray fVSAttrs;
274 VarArray fVSOutputs;
275 VarArray fGSInputs;
276 VarArray fGSOutputs;
277
278 SkString fVSCode;
279
280 struct AttributePair {
281 void set(int index, const SkString& name) {
282 fIndex = index; fName = name;
283 }
284 int fIndex;
285 SkString fName;
286 };
287 SkSTArray<10, AttributePair, true> fEffectAttributes;
288
289 GrGLUniformManager::UniformHandle fViewMatrixUniform;
290
291 GrGLShaderVar* fPositionVar;
292 GrGLShaderVar* fLocalCoordsVar;
293 };
294
295 /** Gets the vertex builder that is used to construct the vertex and geometr y shaders.
296 It may be NULL if this shader program is only meant to have a fragment s hader. */
297 VertexBuilder* getVertexBuilder() const { return fVertexBuilder.get(); }
298
299 bool finish(GrGLuint* outProgramId); 221 bool finish(GrGLuint* outProgramId);
300 222
301 const GrGLContextInfo& ctxInfo() const; 223 const GrGLContextInfo& ctxInfo() const;
302 224
303 private: 225 protected:
226 GrGpuGL* gpu() const { return fGpu; }
227
228 void setInputColor(const char* inputColor) { fInputColor = inputColor; }
229 void setInputCoverage(const char* inputCoverage) { fInputCoverage = inputCov erage; }
230
231 /** Add input/output variable declarations (i.e. 'varying') to the fragment shader. */
232 GrGLShaderVar& fsInputAppend() { return fFSInputs.push_back(); }
233
234 // Generates a name for a variable. The generated string will be name prefix ed by the prefix
235 // char (unless the prefix is '\0'). It also mangles the name to be stage-sp ecific if we're
236 // generating stage code.
237 void nameVariable(SkString* out, char prefix, const char* name);
238
239 // Helper for emitEffects().
240 void createAndEmitEffects(GrGLProgramEffectsBuilder*,
241 const GrEffectStage* effectStages[],
242 const EffectKey effectKeys[],
243 int effectCnt,
244 SkString* inOutFSColor,
245 GrSLConstantVec* fsInOutColorKnownValue);
246
247 virtual bool compileAndAttachShaders(GrGLuint programId) const;
248 virtual void bindProgramLocations(GrGLuint programId) const;
249
304 void appendDecls(const VarArray&, SkString*) const; 250 void appendDecls(const VarArray&, SkString*) const;
305 void appendUniformDecls(ShaderVisibility, SkString*) const; 251 void appendUniformDecls(ShaderVisibility, SkString*) const;
306 252
307 bool compileAndAttachShaders(GrGLuint programId) const;
308 void bindProgramLocations(GrGLuint programId) const;
309
310 typedef GrGLUniformManager::BuilderUniform BuilderUniform;
311 GrGLUniformManager::BuilderUniformArray fUniforms;
312
313 private: 253 private:
314 class CodeStage : public SkNoncopyable { 254 class CodeStage : public SkNoncopyable {
315 public: 255 public:
316 CodeStage() : fNextIndex(0), fCurrentIndex(-1), fEffectStage(NULL) {} 256 CodeStage() : fNextIndex(0), fCurrentIndex(-1), fEffectStage(NULL) {}
317 257
318 bool inStageCode() const { 258 bool inStageCode() const {
319 this->validate(); 259 this->validate();
320 return NULL != fEffectStage; 260 return NULL != fEffectStage;
321 } 261 }
322 262
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
369 kFragCoordConventions_GLSLPrivateFeature = kLastGLSLFeature + 1, 309 kFragCoordConventions_GLSLPrivateFeature = kLastGLSLFeature + 1,
370 kEXTShaderFramebufferFetch_GLSLPrivateFeature, 310 kEXTShaderFramebufferFetch_GLSLPrivateFeature,
371 kNVShaderFramebufferFetch_GLSLPrivateFeature, 311 kNVShaderFramebufferFetch_GLSLPrivateFeature,
372 }; 312 };
373 bool enablePrivateFeature(GLSLPrivateFeature); 313 bool enablePrivateFeature(GLSLPrivateFeature);
374 314
375 // If we ever have VS/GS features we can expand this to take a bitmask of Sh aderVisibility and 315 // If we ever have VS/GS features we can expand this to take a bitmask of Sh aderVisibility and
376 // track the enables separately for each shader. 316 // track the enables separately for each shader.
377 void addFSFeature(uint32_t featureBit, const char* extensionName); 317 void addFSFeature(uint32_t featureBit, const char* extensionName);
378 318
379 // Generates a name for a variable. The generated string will be name prefix ed by the prefix
380 // char (unless the prefix is '\0'). It also mangles the name to be stage-sp ecific if we're
381 // generating stage code.
382 void nameVariable(SkString* out, char prefix, const char* name);
383
384 // Interpretation of DstReadKey when generating code 319 // Interpretation of DstReadKey when generating code
385 enum { 320 enum {
386 kNoDstRead_DstReadKey = 0, 321 kNoDstRead_DstReadKey = 0,
387 kYesDstRead_DstReadKeyBit = 0x1, // Set if we do a dst-copy-read. 322 kYesDstRead_DstReadKeyBit = 0x1, // Set if we do a dst-copy-read.
388 kUseAlphaConfig_DstReadKeyBit = 0x2, // Set if dst-copy config is alpha only. 323 kUseAlphaConfig_DstReadKeyBit = 0x2, // Set if dst-copy config is alpha only.
389 kTopLeftOrigin_DstReadKeyBit = 0x4, // Set if dst-copy origin is top-le ft. 324 kTopLeftOrigin_DstReadKeyBit = 0x4, // Set if dst-copy origin is top-le ft.
390 }; 325 };
391 326
392 enum { 327 enum {
393 kNoFragPosRead_FragPosKey = 0, // The fragment positition wil l not be needed. 328 kNoFragPosRead_FragPosKey = 0, // The fragment positition wil l not be needed.
394 kTopLeftFragPosRead_FragPosKey = 0x1,// Read frag pos relative to t op-left. 329 kTopLeftFragPosRead_FragPosKey = 0x1,// Read frag pos relative to t op-left.
395 kBottomLeftFragPosRead_FragPosKey = 0x2,// Read frag pos relative to b ottom-left. 330 kBottomLeftFragPosRead_FragPosKey = 0x2,// Read frag pos relative to b ottom-left.
396 }; 331 };
397 332
398 GrGpuGL* fGpu; 333 GrGpuGL* fGpu;
399 GrGLUniformManager& fUniformManager; 334 GrGLUniformManager& fUniformManager;
400 uint32_t fFSFeaturesAddedMask; 335 uint32_t fFSFeaturesAddedMask;
401 SkString fFSFunctions; 336 SkString fFSFunctions;
402 SkString fFSExtensions; 337 SkString fFSExtensions;
403 VarArray fFSInputs; 338 VarArray fFSInputs;
404 VarArray fFSOutputs; 339 VarArray fFSOutputs;
340 GrGLUniformManager::BuilderUniformArray fUniforms;
405 341
406 SkString fFSCode; 342 SkString fFSCode;
407 343
408 bool fSetupFragPosition; 344 bool fSetupFragPosition;
409 GrGLUniformManager::UniformHandle fDstCopySamplerUniform; 345 GrGLUniformManager::UniformHandle fDstCopySamplerUniform;
410 346
411 SkString fInputColor; 347 SkString fInputColor;
412 GrSLConstantVec fKnownColorValue; 348 GrSLConstantVec fKnownColorValue;
413 SkString fInputCoverage; 349 SkString fInputCoverage;
414 GrSLConstantVec fKnownCoverageValue; 350 GrSLConstantVec fKnownCoverageValue;
415 351
416 bool fHasCustomColorOutput; 352 bool fHasCustomColorOutput;
417 bool fHasSecondaryOutput; 353 bool fHasSecondaryOutput;
418 354
419 GrGLUniformManager::UniformHandle fRTHeightUniform; 355 GrGLUniformManager::UniformHandle fRTHeightUniform;
420 GrGLUniformManager::UniformHandle fDstCopyTopLeftUniform; 356 GrGLUniformManager::UniformHandle fDstCopyTopLeftUniform;
421 GrGLUniformManager::UniformHandle fDstCopyScaleUniform; 357 GrGLUniformManager::UniformHandle fDstCopyScaleUniform;
422 GrGLUniformManager::UniformHandle fColorUniform; 358 GrGLUniformManager::UniformHandle fColorUniform;
423 GrGLUniformManager::UniformHandle fCoverageUniform; 359 GrGLUniformManager::UniformHandle fCoverageUniform;
424 360
425 bool fTopLeftFragPosRead; 361 bool fTopLeftFragPosRead;
362 };
426 363
427 SkAutoTDelete<VertexBuilder> fVertexBuilder; 364 ////////////////////////////////////////////////////////////////////////////////
365
366 class GrGLFullShaderBuilder : public GrGLShaderBuilder {
367 public:
368 GrGLFullShaderBuilder(GrGpuGL*, GrGLUniformManager&, const GrGLProgramDesc&) ;
369
370 /**
371 * Called by GrGLEffects to add code to one of the shaders.
372 */
373 void vsCodeAppendf(const char format[], ...) SK_PRINTF_LIKE(2, 3) {
374 va_list args;
375 va_start(args, format);
376 fVSCode.appendf(format, args);
377 va_end(args);
378 }
379
380 void vsCodeAppend(const char* str) { fVSCode.append(str); }
381
382 /** Add a vertex attribute to the current program that is passed in from the vertex data.
383 Returns false if the attribute was already there, true otherwise. */
384 bool addAttribute(GrSLType type, const char* name);
385
386 /** Add a varying variable to the current program to pass values between vert ex and fragment
387 shaders. If the last two parameters are non-NULL, they are filled in wit h the name
388 generated. */
389 void addVarying(GrSLType type,
390 const char* name,
391 const char** vsOutName = NULL,
392 const char** fsInName = NULL);
393
394 /** Returns a vertex attribute that represents the vertex position in the VS . This is the
395 pre-matrix position and is commonly used by effects to compute texture c oords via a matrix.
396 */
397 const GrGLShaderVar& positionAttribute() const { return *fPositionVar; }
398
399 /** Returns a vertex attribute that represents the local coords in the VS. T his may be the same
400 as positionAttribute() or it may not be. It depends upon whether the ren dering code
401 specified explicit local coords or not in the GrDrawState. */
402 const GrGLShaderVar& localCoordsAttribute() const { return *fLocalCoordsVar; }
403
404 /**
405 * Are explicit local coordinates provided as input to the vertex shader.
406 */
407 bool hasExplicitLocalCoords() const { return (fLocalCoordsVar != fPositionVa r); }
408
409 bool addEffectAttribute(int attributeIndex, GrSLType type, const SkString& n ame);
410 const SkString* getEffectAttributeName(int attributeIndex) const;
411
412 virtual GrGLProgramEffects* createAndEmitEffects(
413 const GrEffectStage* effectStages[],
414 const EffectKey effectKeys[],
415 int effectCnt,
416 SkString* inOutFSColor,
417 GrSLConstantVec* fsInOutColorKnownValue) SK_OVERRIDE;
418
419 GrGLUniformManager::UniformHandle getViewMatrixUniform() const {
420 return fViewMatrixUniform;
421 }
422
423 protected:
424 virtual bool compileAndAttachShaders(GrGLuint programId) const SK_OVERRIDE;
425 virtual void bindProgramLocations(GrGLuint programId) const SK_OVERRIDE;
426
427 private:
428 const GrGLProgramDesc& fDesc;
429 VarArray fVSAttrs;
430 VarArray fVSOutputs;
431 VarArray fGSInputs;
432 VarArray fGSOutputs;
433
434 SkString fVSCode;
435
436 struct AttributePair {
437 void set(int index, const SkString& name) {
438 fIndex = index; fName = name;
439 }
440 int fIndex;
441 SkString fName;
442 };
443 SkSTArray<10, AttributePair, true> fEffectAttributes;
444
445 GrGLUniformManager::UniformHandle fViewMatrixUniform;
446
447 GrGLShaderVar* fPositionVar;
448 GrGLShaderVar* fLocalCoordsVar;
449
450 typedef GrGLShaderBuilder INHERITED;
428 }; 451 };
429 452
430 #endif 453 #endif
OLDNEW
« no previous file with comments | « src/gpu/gl/GrGLProgramEffects.cpp ('k') | src/gpu/gl/GrGLShaderBuilder.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698