OLD | NEW |
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 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
101 | 101 |
102 enum ShaderVisibility { | 102 enum ShaderVisibility { |
103 kVertex_Visibility = 0x1, | 103 kVertex_Visibility = 0x1, |
104 kGeometry_Visibility = 0x2, | 104 kGeometry_Visibility = 0x2, |
105 kFragment_Visibility = 0x4, | 105 kFragment_Visibility = 0x4, |
106 }; | 106 }; |
107 | 107 |
108 GrGLShaderBuilder(const GrGLContextInfo&, | 108 GrGLShaderBuilder(const GrGLContextInfo&, |
109 GrGLUniformManager&, | 109 GrGLUniformManager&, |
110 const GrGLProgramDesc&, | 110 const GrGLProgramDesc&, |
111 bool hasVertexShaderEffects); | 111 bool needsVertexShader); |
112 | 112 |
113 /** | 113 /** |
114 * Use of these features may require a GLSL extension to be enabled. Shaders
may not compile | 114 * Use of these features may require a GLSL extension to be enabled. Shaders
may not compile |
115 * if code is added that uses one of these features without calling enableFe
ature() | 115 * if code is added that uses one of these features without calling enableFe
ature() |
116 */ | 116 */ |
117 enum GLSLFeature { | 117 enum GLSLFeature { |
118 kStandardDerivatives_GLSLFeature = 0, | 118 kStandardDerivatives_GLSLFeature = 0, |
119 | 119 |
120 kLastGLSLFeature = kStandardDerivatives_GLSLFeature | 120 kLastGLSLFeature = kStandardDerivatives_GLSLFeature |
121 }; | 121 }; |
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
250 * Adds code for effects. effectStages contains the effects to add. effectKe
ys[i] is the key | 250 * Adds code for effects. effectStages contains the effects to add. effectKe
ys[i] is the key |
251 * generated from effectStages[i]. An entry in effectStages can be NULL, in
which case it is | 251 * generated from effectStages[i]. An entry in effectStages can be NULL, in
which case it is |
252 * skipped. Moreover, if the corresponding key is GrGLEffect::NoEffectKey th
en it is skipped. | 252 * skipped. Moreover, if the corresponding key is GrGLEffect::NoEffectKey th
en it is skipped. |
253 * inOutFSColor specifies the input color to the first stage and is updated
to be the | 253 * inOutFSColor specifies the input color to the first stage and is updated
to be the |
254 * output color of the last stage. fsInOutColorKnownValue specifies whether
the input color | 254 * output color of the last stage. fsInOutColorKnownValue specifies whether
the input color |
255 * has a known constant value and is updated to refer to the status of the o
utput color. | 255 * has a known constant value and is updated to refer to the status of the o
utput color. |
256 * The handles to texture samplers for effectStage[i] are added to effectSam
plerHandles[i]. The | 256 * The handles to texture samplers for effectStage[i] are added to effectSam
plerHandles[i]. The |
257 * glEffects array is updated to contain the GrGLEffect generated for each e
ntry in | 257 * glEffects array is updated to contain the GrGLEffect generated for each e
ntry in |
258 * effectStages. | 258 * effectStages. |
259 */ | 259 */ |
260 void emitEffects(GrGLEffect* const glEffects[], | 260 void emitEffects(const GrEffectStage* effectStages[], |
261 const GrDrawEffect drawEffects[], | |
262 const GrBackendEffectFactory::EffectKey effectKeys[], | 261 const GrBackendEffectFactory::EffectKey effectKeys[], |
263 int effectCnt, | 262 int effectCnt, |
264 SkString* inOutFSColor, | 263 SkString* inOutFSColor, |
265 GrSLConstantVec* fsInOutColorKnownValue, | 264 GrSLConstantVec* fsInOutColorKnownValue, |
266 SkTArray<GrGLUniformManager::UniformHandle, true>* effectSa
mplerHandles[]); | 265 SkTArray<GrGLUniformManager::UniformHandle, true>* effectSa
mplerHandles[], |
| 266 GrGLEffect* glEffects[]); |
267 | 267 |
268 GrGLUniformManager::UniformHandle getRTHeightUniform() const { return fRTHei
ghtUniform; } | 268 GrGLUniformManager::UniformHandle getRTHeightUniform() const { return fRTHei
ghtUniform; } |
269 GrGLUniformManager::UniformHandle getDstCopyTopLeftUniform() const { | 269 GrGLUniformManager::UniformHandle getDstCopyTopLeftUniform() const { |
270 return fDstCopyTopLeftUniform; | 270 return fDstCopyTopLeftUniform; |
271 } | 271 } |
272 GrGLUniformManager::UniformHandle getDstCopyScaleUniform() const { | 272 GrGLUniformManager::UniformHandle getDstCopyScaleUniform() const { |
273 return fDstCopyScaleUniform; | 273 return fDstCopyScaleUniform; |
274 } | 274 } |
275 GrGLUniformManager::UniformHandle getDstCopySamplerUniform() const { | 275 GrGLUniformManager::UniformHandle getDstCopySamplerUniform() const { |
276 return fDstCopySampler.fSamplerUniform; | 276 return fDstCopySampler.fSamplerUniform; |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
382 private: | 382 private: |
383 void appendDecls(const VarArray&, SkString*) const; | 383 void appendDecls(const VarArray&, SkString*) const; |
384 void appendUniformDecls(ShaderVisibility, SkString*) const; | 384 void appendUniformDecls(ShaderVisibility, SkString*) const; |
385 | 385 |
386 typedef GrGLUniformManager::BuilderUniform BuilderUniform; | 386 typedef GrGLUniformManager::BuilderUniform BuilderUniform; |
387 GrGLUniformManager::BuilderUniformArray fUniforms; | 387 GrGLUniformManager::BuilderUniformArray fUniforms; |
388 | 388 |
389 private: | 389 private: |
390 class CodeStage : public SkNoncopyable { | 390 class CodeStage : public SkNoncopyable { |
391 public: | 391 public: |
392 CodeStage() : fNextIndex(0), fCurrentIndex(-1), fEffect(NULL) {} | 392 CodeStage() : fNextIndex(0), fCurrentIndex(-1), fEffectStage(NULL) {} |
393 | 393 |
394 bool inStageCode() const { | 394 bool inStageCode() const { |
395 this->validate(); | 395 this->validate(); |
396 return NULL != fEffect; | 396 return NULL != fEffectStage; |
397 } | 397 } |
398 | 398 |
399 const GrEffectRef* effect() const { | 399 const GrEffectStage* effectStage() const { |
400 this->validate(); | 400 this->validate(); |
401 return fEffect; | 401 return fEffectStage; |
402 } | 402 } |
403 | 403 |
404 int stageIndex() const { | 404 int stageIndex() const { |
405 this->validate(); | 405 this->validate(); |
406 return fCurrentIndex; | 406 return fCurrentIndex; |
407 } | 407 } |
408 | 408 |
409 class AutoStageRestore : public SkNoncopyable { | 409 class AutoStageRestore : public SkNoncopyable { |
410 public: | 410 public: |
411 AutoStageRestore(CodeStage* codeStage, const GrEffectRef* effect) { | 411 AutoStageRestore(CodeStage* codeStage, const GrEffectStage* newStage
) { |
412 SkASSERT(NULL != codeStage); | 412 SkASSERT(NULL != codeStage); |
413 fSavedIndex = codeStage->fCurrentIndex; | 413 fSavedIndex = codeStage->fCurrentIndex; |
414 fSavedEffect = codeStage->fEffect; | 414 fSavedEffectStage = codeStage->fEffectStage; |
415 | 415 |
416 if (NULL == effect) { | 416 if (NULL == newStage) { |
417 codeStage->fCurrentIndex = -1; | 417 codeStage->fCurrentIndex = -1; |
418 } else { | 418 } else { |
419 codeStage->fCurrentIndex = codeStage->fNextIndex++; | 419 codeStage->fCurrentIndex = codeStage->fNextIndex++; |
420 } | 420 } |
421 codeStage->fEffect = effect; | 421 codeStage->fEffectStage = newStage; |
422 | 422 |
423 fCodeStage = codeStage; | 423 fCodeStage = codeStage; |
424 } | 424 } |
425 ~AutoStageRestore() { | 425 ~AutoStageRestore() { |
426 fCodeStage->fCurrentIndex = fSavedIndex; | 426 fCodeStage->fCurrentIndex = fSavedIndex; |
427 fCodeStage->fEffect = fSavedEffect; | 427 fCodeStage->fEffectStage = fSavedEffectStage; |
428 } | 428 } |
429 private: | 429 private: |
430 CodeStage* fCodeStage; | 430 CodeStage* fCodeStage; |
431 int fSavedIndex; | 431 int fSavedIndex; |
432 const GrEffectRef* fSavedEffect; | 432 const GrEffectStage* fSavedEffectStage; |
433 }; | 433 }; |
434 private: | 434 private: |
435 void validate() const { SkASSERT((NULL == fEffect) == (-1 == fCurrentInd
ex)); } | 435 void validate() const { SkASSERT((NULL == fEffectStage) == (-1 == fCurre
ntIndex)); } |
436 int fNextIndex; | 436 int fNextIndex; |
437 int fCurrentIndex; | 437 int fCurrentIndex; |
438 const GrEffectRef* fEffect; | 438 const GrEffectStage* fEffectStage; |
439 } fCodeStage; | 439 } fCodeStage; |
440 | 440 |
441 /** | 441 /** |
442 * Features that should only be enabled by GrGLShaderBuilder itself. | 442 * Features that should only be enabled by GrGLShaderBuilder itself. |
443 */ | 443 */ |
444 enum GLSLPrivateFeature { | 444 enum GLSLPrivateFeature { |
445 kFragCoordConventions_GLSLPrivateFeature = kLastGLSLFeature + 1, | 445 kFragCoordConventions_GLSLPrivateFeature = kLastGLSLFeature + 1, |
446 kEXTShaderFramebufferFetch_GLSLPrivateFeature, | 446 kEXTShaderFramebufferFetch_GLSLPrivateFeature, |
447 kNVShaderFramebufferFetch_GLSLPrivateFeature, | 447 kNVShaderFramebufferFetch_GLSLPrivateFeature, |
448 }; | 448 }; |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
487 GrGLUniformManager::UniformHandle fRTHeightUniform; | 487 GrGLUniformManager::UniformHandle fRTHeightUniform; |
488 GrGLUniformManager::UniformHandle fDstCopyTopLeftUniform; | 488 GrGLUniformManager::UniformHandle fDstCopyTopLeftUniform; |
489 GrGLUniformManager::UniformHandle fDstCopyScaleUniform; | 489 GrGLUniformManager::UniformHandle fDstCopyScaleUniform; |
490 | 490 |
491 bool fTopLeftFragPosRead; | 491 bool fTopLeftFragPosRead; |
492 | 492 |
493 SkAutoTDelete<VertexBuilder> fVertexBuilder; | 493 SkAutoTDelete<VertexBuilder> fVertexBuilder; |
494 }; | 494 }; |
495 | 495 |
496 #endif | 496 #endif |
OLD | NEW |