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