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

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

Issue 302663006: Incremental refactoring of GrGLProgram and GrGLShaderBuilder (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: more Created 6 years, 6 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
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 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
63 struct GenProgramOutput { 63 struct GenProgramOutput {
64 GrGLProgramEffects* fColorEffects; 64 GrGLProgramEffects* fColorEffects;
65 GrGLProgramEffects* fCoverageEffects; 65 GrGLProgramEffects* fCoverageEffects;
66 UniformHandles fUniformHandles; 66 UniformHandles fUniformHandles;
67 bool fHasVS; 67 bool fHasVS;
68 int fNumTexCoordSets; 68 int fNumTexCoordSets;
69 GrGLuint fProgramID; 69 GrGLuint fProgramID;
70 }; 70 };
71 71
72 static bool GenProgram(GrGpuGL* gpu, 72 static bool GenProgram(GrGpuGL* gpu,
73 GrGLUniformManager& uman, 73 GrGLUniformManager* uman,
74 const GrGLProgramDesc& desc, 74 const GrGLProgramDesc& desc,
75 const GrEffectStage* inColorStages[], 75 const GrEffectStage* inColorStages[],
76 const GrEffectStage* inCoverageStages[], 76 const GrEffectStage* inCoverageStages[],
77 GenProgramOutput* output); 77 GenProgramOutput* output);
78 78
79 virtual ~GrGLShaderBuilder() {} 79 virtual ~GrGLShaderBuilder() {}
80 80
81 /** 81 /**
82 * Use of these features may require a GLSL extension to be enabled. Shaders may not compile 82 * Use of these features may require a GLSL extension to be enabled. Shaders may not compile
83 * if code is added that uses one of these features without calling enableFe ature() 83 * if code is added that uses one of these features without calling enableFe ature()
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 const char** outName = NULL) { 167 const char** outName = NULL) {
168 return this->addUniformArray(visibility, type, name, GrGLShaderVar::kNon Array, outName); 168 return this->addUniformArray(visibility, type, name, GrGLShaderVar::kNon Array, outName);
169 } 169 }
170 GrGLUniformManager::UniformHandle addUniformArray(uint32_t visibility, 170 GrGLUniformManager::UniformHandle addUniformArray(uint32_t visibility,
171 GrSLType type, 171 GrSLType type,
172 const char* name, 172 const char* name,
173 int arrayCount, 173 int arrayCount,
174 const char** outName = NUL L); 174 const char** outName = NUL L);
175 175
176 const GrGLShaderVar& getUniformVariable(GrGLUniformManager::UniformHandle u) const { 176 const GrGLShaderVar& getUniformVariable(GrGLUniformManager::UniformHandle u) const {
177 return fUniformManager.getBuilderUniform(fUniforms, u).fVariable; 177 return fUniformManager->getBuilderUniform(fUniforms, u).fVariable;
178 } 178 }
179 179
180 /** 180 /**
181 * Shortcut for getUniformVariable(u).c_str() 181 * Shortcut for getUniformVariable(u).c_str()
182 */ 182 */
183 const char* getUniformCStr(GrGLUniformManager::UniformHandle u) const { 183 const char* getUniformCStr(GrGLUniformManager::UniformHandle u) const {
184 return this->getUniformVariable(u).c_str(); 184 return this->getUniformVariable(u).c_str();
185 } 185 }
186 186
187 /** 187 /**
188 * This returns a variable name to access the 2D, perspective correct versio n of the coords in 188 * This returns a variable name to access the 2D, perspective correct versio n of the coords in
189 * the fragment shader. If the coordinates at index are 3-dimensional, it im mediately emits a 189 * the fragment shader. If the coordinates at index are 3-dimensional, it im mediately emits a
190 * perspective divide into the fragment shader (xy / z) to convert them to 2 D. 190 * perspective divide into the fragment shader (xy / z) to convert them to 2 D.
191 */ 191 */
192 SkString ensureFSCoords2D(const TransformedCoordsArray&, int index); 192 SkString ensureFSCoords2D(const TransformedCoordsArray&, int index);
193 193
194 /** Returns a variable name that represents the position of the fragment in the FS. The position 194 /** Returns a variable name that represents the position of the fragment in the FS. The position
195 is in device space (e.g. 0,0 is the top left and pixel centers are at ha lf-integers). */ 195 is in device space (e.g. 0,0 is the top left and pixel centers are at ha lf-integers). */
196 const char* fragmentPosition(); 196 const char* fragmentPosition();
197 197
198 /** Returns the color of the destination pixel. This may be NULL if no effec t advertised 198 /** Returns the variable name that holds the color of the destination pixel. This may be NULL if
199 that it will read the destination. */ 199 no effect advertised that it will read the destination. */
200 const char* dstColor(); 200 const char* dstColor();
201 201
202 /**
203 * Interfaces used by GrGLProgram.
204 */
205 const GrGLSLExpr4& getInputColor() const {
206 return fInputColor;
207 }
208 const GrGLSLExpr4& getInputCoverage() const {
209 return fInputCoverage;
210 }
211
212 /**
213 * Adds code for effects and returns a GrGLProgramEffects* object. The calle r is responsible for
214 * deleting it when finished. effectStages contains the effects to add. effe ctKeys[i] is the key
215 * generated from effectStages[i]. inOutFSColor specifies the input color to the first stage and
216 * is updated to be the output color of the last stage.
217 * The handles to texture samplers for effectStage[i] are added to
218 * effectSamplerHandles[i].
219 */
220 virtual GrGLProgramEffects* createAndEmitEffects(const GrEffectStage* effect Stages[],
221 const EffectKey effectKeys[ ],
222 int effectCnt,
223 GrGLSLExpr4* inOutFSColor) = 0;
224
225 const char* getColorOutputName() const;
226 const char* enableSecondaryOutput();
227
228 GrGLUniformManager::UniformHandle getRTHeightUniform() const { return fRTHei ghtUniform; }
229 GrGLUniformManager::UniformHandle getDstCopyTopLeftUniform() const {
230 return fDstCopyTopLeftUniform;
231 }
232 GrGLUniformManager::UniformHandle getDstCopyScaleUniform() const {
233 return fDstCopyScaleUniform;
234 }
235 GrGLUniformManager::UniformHandle getColorUniform() const { return fColorUni form; }
236 GrGLUniformManager::UniformHandle getCoverageUniform() const { return fCover ageUniform; }
237 GrGLUniformManager::UniformHandle getDstCopySamplerUniform() const {
238 return fDstCopySamplerUniform;
239 }
240
241 bool finish(GrGLuint* outProgramId);
242
243 const GrGLContextInfo& ctxInfo() const; 202 const GrGLContextInfo& ctxInfo() const;
244 203
245 /** 204 /**
246 * Helper for begining and ending a block in the fragment code. TODO: Make G rGLShaderBuilder 205 * Helper for begining and ending a block in the fragment code. TODO: Make G rGLShaderBuilder
247 * aware of all blocks and turn single \t's into the correct number of tabs (or spaces) so that 206 * aware of all blocks and turn single \t's into the correct number of tabs (or spaces) so that
248 * our shaders print pretty without effect writers tracking indentation. 207 * our shaders print pretty without effect writers tracking indentation.
249 */ 208 */
250 class FSBlock { 209 class FSBlock {
251 public: 210 public:
252 FSBlock(GrGLShaderBuilder* builder) : fBuilder(builder) { 211 FSBlock(GrGLShaderBuilder* builder) : fBuilder(builder) {
253 SkASSERT(NULL != builder); 212 SkASSERT(NULL != builder);
254 fBuilder->fsCodeAppend("\t{\n"); 213 fBuilder->fsCodeAppend("\t{\n");
255 } 214 }
256 215
257 ~FSBlock() { 216 ~FSBlock() {
258 fBuilder->fsCodeAppend("\t}\n"); 217 fBuilder->fsCodeAppend("\t}\n");
259 } 218 }
260 private: 219 private:
261 GrGLShaderBuilder* fBuilder; 220 GrGLShaderBuilder* fBuilder;
262 }; 221 };
263 222
264 protected: 223 protected:
265 GrGLShaderBuilder(GrGpuGL*, GrGLUniformManager&, const GrGLProgramDesc&); 224 GrGLShaderBuilder(GrGpuGL*, GrGLUniformManager*, const GrGLProgramDesc&);
266 225
267 GrGpuGL* gpu() const { return fGpu; } 226 GrGpuGL* gpu() const { return fGpu; }
268 227
269 const GrGLProgramDesc& desc() const { return fDesc; } 228 const GrGLProgramDesc& desc() const { return fDesc; }
270 229
271 void setInputColor(const GrGLSLExpr4& inputColor) { fInputColor = inputColor ; } 230 void setInputColor(const GrGLSLExpr4& inputColor) { fInputColor = inputColor ; }
272 void setInputCoverage(const GrGLSLExpr4& inputCoverage) { fInputCoverage = i nputCoverage; } 231 void setInputCoverage(const GrGLSLExpr4& inputCoverage) { fInputCoverage = i nputCoverage; }
273 232
274 /** Add input/output variable declarations (i.e. 'varying') to the fragment shader. */ 233 /** Add input/output variable declarations (i.e. 'varying') to the fragment shader. */
275 GrGLShaderVar& fsInputAppend() { return fFSInputs.push_back(); } 234 GrGLShaderVar& fsInputAppend() { return fFSInputs.push_back(); }
276 235
236 // Helper for emitEffects().
237 void createAndEmitEffects(GrGLProgramEffectsBuilder*,
robertphillips 2014/05/29 12:24:57 extra spaces here?
bsalomon 2014/05/29 21:22:16 Done.
238 const GrEffectStage* effectStages[],
239 const EffectKey effectKeys[],
240 int effectCnt,
241 GrGLSLExpr4* inOutFSColor);
242
277 // Generates a name for a variable. The generated string will be name prefix ed by the prefix 243 // Generates a name for a variable. The generated string will be name prefix ed by the prefix
278 // char (unless the prefix is '\0'). It also mangles the name to be stage-sp ecific if we're 244 // char (unless the prefix is '\0'). It also mangles the name to be stage-sp ecific if we're
279 // generating stage code. 245 // generating stage code.
280 void nameVariable(SkString* out, char prefix, const char* name); 246 void nameVariable(SkString* out, char prefix, const char* name);
281 247
282 // Helper for emitEffects(). 248 virtual bool compileAndAttachShaders(GrGLuint programId, SkTDArray<GrGLuint> * shaderIds) const;
283 void createAndEmitEffects(GrGLProgramEffectsBuilder*,
284 const GrEffectStage* effectStages[],
285 const EffectKey effectKeys[],
286 int effectCnt,
287 GrGLSLExpr4* inOutFSColor);
288 249
289 virtual bool compileAndAttachShaders(GrGLuint programId, SkTDArray<GrGLuint> * shaderIds) const;
290 virtual void bindProgramLocations(GrGLuint programId) const; 250 virtual void bindProgramLocations(GrGLuint programId) const;
291 251
292 void appendDecls(const VarArray&, SkString*) const; 252 void appendDecls(const VarArray&, SkString*) const;
293 void appendUniformDecls(ShaderVisibility, SkString*) const; 253 void appendUniformDecls(ShaderVisibility, SkString*) const;
294 254
295 private: 255 private:
296 class CodeStage : SkNoncopyable { 256 class CodeStage : SkNoncopyable {
297 public: 257 public:
298 CodeStage() : fNextIndex(0), fCurrentIndex(-1), fEffectStage(NULL) {} 258 CodeStage() : fNextIndex(0), fCurrentIndex(-1), fEffectStage(NULL) {}
299 259
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
342 int fNextIndex; 302 int fNextIndex;
343 int fCurrentIndex; 303 int fCurrentIndex;
344 const GrEffectStage* fEffectStage; 304 const GrEffectStage* fEffectStage;
345 } fCodeStage; 305 } fCodeStage;
346 306
347 bool genProgram(const GrEffectStage* colorStages[], 307 bool genProgram(const GrEffectStage* colorStages[],
348 const GrEffectStage* coverageStages[], 308 const GrEffectStage* coverageStages[],
349 GenProgramOutput* output); 309 GenProgramOutput* output);
350 310
351 /** 311 /**
312 * Adds code for effects and returns a GrGLProgramEffects* object. The caller is responsible for
313 * deleting it when finished. effectStages contains the effects to add. effec tKeys[i] is the key
314 * generated from effectStages[i]. inOutFSColor specifies the input color to the first stage and
315 * is updated to be the output color of the last stage.
316 * The handles to texture samplers for effectStage[i] are added to
317 * effectSamplerHandles[i].
318 */
319 virtual GrGLProgramEffects* createAndEmitEffects(const GrEffectStage* effect Stages[],
320 const EffectKey effectKeys[ ],
321 int effectCnt,
322 GrGLSLExpr4* inOutFSColor) = 0;
323
324 /** Enables using the secondary color output and returns the name of the var in which it is
325 to be stored */
326 const char* enableSecondaryOutput();
327 /** Gets the name of the primary color output. */
328 const char* getColorOutputName() const;
329
330 bool finish(GrGLuint* outProgramId);
331
332 const GrGLSLExpr4& getInputColor() const {
333 return fInputColor;
334 }
335
336 const GrGLSLExpr4& getInputCoverage() const {
337 return fInputCoverage;
338 }
339
340 /**
352 * Features that should only be enabled by GrGLShaderBuilder itself. 341 * Features that should only be enabled by GrGLShaderBuilder itself.
353 */ 342 */
354 enum GLSLPrivateFeature { 343 enum GLSLPrivateFeature {
355 kFragCoordConventions_GLSLPrivateFeature = kLastGLSLFeature + 1, 344 kFragCoordConventions_GLSLPrivateFeature = kLastGLSLFeature + 1,
356 kEXTShaderFramebufferFetch_GLSLPrivateFeature, 345 kEXTShaderFramebufferFetch_GLSLPrivateFeature,
357 kNVShaderFramebufferFetch_GLSLPrivateFeature, 346 kNVShaderFramebufferFetch_GLSLPrivateFeature,
358 }; 347 };
359 bool enablePrivateFeature(GLSLPrivateFeature); 348 bool enablePrivateFeature(GLSLPrivateFeature);
360 349
361 // If we ever have VS/GS features we can expand this to take a bitmask of Sh aderVisibility and 350 // If we ever have VS/GS features we can expand this to take a bitmask of Sh aderVisibility and
362 // track the enables separately for each shader. 351 // track the enables separately for each shader.
363 void addFSFeature(uint32_t featureBit, const char* extensionName); 352 void addFSFeature(uint32_t featureBit, const char* extensionName);
364 353
365 // Interpretation of DstReadKey when generating code 354 // Interpretation of DstReadKey when generating code
366 enum { 355 enum {
367 kNoDstRead_DstReadKey = 0, 356 kNoDstRead_DstReadKey = 0,
368 kYesDstRead_DstReadKeyBit = 0x1, // Set if we do a dst-copy-read. 357 kYesDstRead_DstReadKeyBit = 0x1, // Set if we do a dst-copy-read.
369 kUseAlphaConfig_DstReadKeyBit = 0x2, // Set if dst-copy config is alpha only. 358 kUseAlphaConfig_DstReadKeyBit = 0x2, // Set if dst-copy config is alpha only.
370 kTopLeftOrigin_DstReadKeyBit = 0x4, // Set if dst-copy origin is top-le ft. 359 kTopLeftOrigin_DstReadKeyBit = 0x4, // Set if dst-copy origin is top-le ft.
371 }; 360 };
372 361
373 enum { 362 enum {
374 kNoFragPosRead_FragPosKey = 0, // The fragment positition wil l not be needed. 363 kNoFragPosRead_FragPosKey = 0, // The fragment positition wil l not be needed.
375 kTopLeftFragPosRead_FragPosKey = 0x1,// Read frag pos relative to t op-left. 364 kTopLeftFragPosRead_FragPosKey = 0x1,// Read frag pos relative to t op-left.
376 kBottomLeftFragPosRead_FragPosKey = 0x2,// Read frag pos relative to b ottom-left. 365 kBottomLeftFragPosRead_FragPosKey = 0x2,// Read frag pos relative to b ottom-left.
377 }; 366 };
378 367
379 const GrGLProgramDesc& fDesc; 368 const GrGLProgramDesc& fDesc;
380 GrGpuGL* fGpu; 369 GrGpuGL* fGpu;
381 GrGLUniformManager& fUniformManager; 370 SkAutoTUnref<GrGLUniformManager> fUniformManager;
382 uint32_t fFSFeaturesAddedMask; 371 uint32_t fFSFeaturesAddedMask;
383 SkString fFSFunctions; 372 SkString fFSFunctions;
384 SkString fFSExtensions; 373 SkString fFSExtensions;
385 VarArray fFSInputs; 374 VarArray fFSInputs;
386 VarArray fFSOutputs; 375 VarArray fFSOutputs;
387 GrGLUniformManager::BuilderUniformArray fUniforms; 376 GrGLUniformManager::BuilderUniformArray fUniforms;
388 377
389 SkString fFSCode; 378 SkString fFSCode;
390 379
391 bool fSetupFragPosition; 380 bool fSetupFragPosition;
(...skipping 11 matching lines...) Expand all
403 GrGLUniformManager::UniformHandle fColorUniform; 392 GrGLUniformManager::UniformHandle fColorUniform;
404 GrGLUniformManager::UniformHandle fCoverageUniform; 393 GrGLUniformManager::UniformHandle fCoverageUniform;
405 394
406 bool fTopLeftFragPosRead; 395 bool fTopLeftFragPosRead;
407 }; 396 };
408 397
409 //////////////////////////////////////////////////////////////////////////////// 398 ////////////////////////////////////////////////////////////////////////////////
410 399
411 class GrGLFullShaderBuilder : public GrGLShaderBuilder { 400 class GrGLFullShaderBuilder : public GrGLShaderBuilder {
412 public: 401 public:
413 GrGLFullShaderBuilder(GrGpuGL*, GrGLUniformManager&, const GrGLProgramDesc&) ; 402 GrGLFullShaderBuilder(GrGpuGL*, GrGLUniformManager*, const GrGLProgramDesc&) ;
414 403
415 /** 404 /**
416 * Called by GrGLEffects to add code to one of the shaders. 405 * Called by GrGLEffects to add code to one of the shaders.
417 */ 406 */
418 void vsCodeAppendf(const char format[], ...) SK_PRINTF_LIKE(2, 3) { 407 void vsCodeAppendf(const char format[], ...) SK_PRINTF_LIKE(2, 3) {
419 va_list args; 408 va_list args;
420 va_start(args, format); 409 va_start(args, format);
421 fVSCode.appendVAList(format, args); 410 fVSCode.appendVAList(format, args);
422 va_end(args); 411 va_end(args);
423 } 412 }
(...skipping 23 matching lines...) Expand all
447 const GrGLShaderVar& localCoordsAttribute() const { return *fLocalCoordsVar; } 436 const GrGLShaderVar& localCoordsAttribute() const { return *fLocalCoordsVar; }
448 437
449 /** 438 /**
450 * Are explicit local coordinates provided as input to the vertex shader. 439 * Are explicit local coordinates provided as input to the vertex shader.
451 */ 440 */
452 bool hasExplicitLocalCoords() const { return (fLocalCoordsVar != fPositionVa r); } 441 bool hasExplicitLocalCoords() const { return (fLocalCoordsVar != fPositionVa r); }
453 442
454 bool addEffectAttribute(int attributeIndex, GrSLType type, const SkString& n ame); 443 bool addEffectAttribute(int attributeIndex, GrSLType type, const SkString& n ame);
455 const SkString* getEffectAttributeName(int attributeIndex) const; 444 const SkString* getEffectAttributeName(int attributeIndex) const;
456 445
457 virtual GrGLProgramEffects* createAndEmitEffects(
458 const GrEffectStage* effectStages[],
459 const EffectKey effectKeys[],
460 int effectCnt,
461 GrGLSLExpr4* inOutFSColor) SK_OVERRIDE;
462
463 /** 446 /**
464 * The view matrix uniform is only valid in the VS. It is always mat33. 447 * The view matrix uniform is only valid in the VS. It is always mat33.
465 */ 448 */
466 GrGLUniformManager::UniformHandle getViewMatrixUniform() const { 449 GrGLUniformManager::UniformHandle getViewMatrixUniform() const {
467 return fViewMatrixUniform; 450 return fViewMatrixUniform;
468 } 451 }
469 452
470 GrGLUniformManager::UniformHandle getRTAdjustmentVecUniform() const { 453 GrGLUniformManager::UniformHandle getRTAdjustmentVecUniform() const {
471 return fRTAdustmentVecUniform; 454 return fRTAdustmentVecUniform;
472 } 455 }
473 456
474 protected: 457 private:
475 virtual bool compileAndAttachShaders(GrGLuint programId, SkTDArray<GrGLuint> * shaderIds) const SK_OVERRIDE; 458 virtual GrGLProgramEffects* createAndEmitEffects(const GrEffectStage* effect Stages[],
459 const EffectKey effectKeys[ ],
460 int effectCnt,
461 GrGLSLExpr4* inOutFSColor) SK_OVERRIDE;
462 virtual bool compileAndAttachShaders(GrGLuint programId,
463 SkTDArray<GrGLuint>* shaderIds) const S K_OVERRIDE;
464
476 virtual void bindProgramLocations(GrGLuint programId) const SK_OVERRIDE; 465 virtual void bindProgramLocations(GrGLuint programId) const SK_OVERRIDE;
477 466
478 private:
479 VarArray fVSAttrs; 467 VarArray fVSAttrs;
480 VarArray fVSOutputs; 468 VarArray fVSOutputs;
481 VarArray fGSInputs; 469 VarArray fGSInputs;
482 VarArray fGSOutputs; 470 VarArray fGSOutputs;
483 471
484 SkString fVSCode; 472 SkString fVSCode;
485 473
486 struct AttributePair { 474 struct AttributePair {
487 void set(int index, const SkString& name) { 475 void set(int index, const SkString& name) {
488 fIndex = index; fName = name; 476 fIndex = index; fName = name;
489 } 477 }
490 int fIndex; 478 int fIndex;
491 SkString fName; 479 SkString fName;
492 }; 480 };
493 SkSTArray<10, AttributePair, true> fEffectAttributes; 481 SkSTArray<10, AttributePair, true> fEffectAttributes;
494 482
495 GrGLUniformManager::UniformHandle fViewMatrixUniform; 483 GrGLUniformManager::UniformHandle fViewMatrixUniform;
496 GrGLUniformManager::UniformHandle fRTAdustmentVecUniform; 484 GrGLUniformManager::UniformHandle fRTAdustmentVecUniform;
497 GrGLShaderVar* fPositionVar; 485 GrGLShaderVar* fPositionVar;
498 GrGLShaderVar* fLocalCoordsVar; 486 GrGLShaderVar* fLocalCoordsVar;
499 487
500 typedef GrGLShaderBuilder INHERITED; 488 typedef GrGLShaderBuilder INHERITED;
501 }; 489 };
502 490
503 //////////////////////////////////////////////////////////////////////////////// 491 ////////////////////////////////////////////////////////////////////////////////
504 492
505 class GrGLFragmentOnlyShaderBuilder : public GrGLShaderBuilder { 493 class GrGLFragmentOnlyShaderBuilder : public GrGLShaderBuilder {
506 public: 494 public:
507 GrGLFragmentOnlyShaderBuilder(GrGpuGL*, GrGLUniformManager&, const GrGLProgr amDesc&); 495 GrGLFragmentOnlyShaderBuilder(GrGpuGL*, GrGLUniformManager*, const GrGLProgr amDesc&);
508 496
509 int getNumTexCoordSets() const { return fNumTexCoordSets; } 497 int getNumTexCoordSets() const { return fNumTexCoordSets; }
510 int addTexCoordSets(int count); 498 int addTexCoordSets(int count);
511 499
512 virtual GrGLProgramEffects* createAndEmitEffects( 500 private:
513 const GrEffectStage* effectStages[],
514 const EffectKey effectKeys[],
515 int effectCnt,
516 GrGLSLExpr4* inOutFSColor) SK_OVERRIDE;
517 501
518 private: 502 virtual GrGLProgramEffects* createAndEmitEffects(const GrEffectStage* effect Stages[],
503 const EffectKey effectKeys[ ],
504 int effectCnt,
505 GrGLSLExpr4* inOutFSColor) SK_OVERRIDE;
506
519 int fNumTexCoordSets; 507 int fNumTexCoordSets;
520 508
521 typedef GrGLShaderBuilder INHERITED; 509 typedef GrGLShaderBuilder INHERITED;
522 }; 510 };
523 511
524 #endif 512 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698