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 ShaderType { | 101 enum ShaderType { |
102 kVertex_ShaderType = 0x1, | 102 kVertex_ShaderType = 0x1, |
103 kGeometry_ShaderType = 0x2, | 103 kGeometry_ShaderType = 0x2, |
104 kFragment_ShaderType = 0x4, | 104 kFragment_ShaderType = 0x4, |
105 }; | 105 }; |
106 | 106 |
107 GrGLShaderBuilder(const GrGLContextInfo&, GrGLUniformManager&, const GrGLPro
gramDesc&); | 107 GrGLShaderBuilder(const GrGLContextInfo&, GrGLUniformManager&, const GrGLPro
gramDesc&); |
108 | 108 |
109 /** | 109 /** |
| 110 * Use of these features may require a GLSL extension to be enabled. Shaders
may not compile |
| 111 * if code is added that uses one of these features without calling enableFe
ature() |
| 112 */ |
| 113 enum GLSLFeature { |
| 114 kStandardDerivatives_GLSLFeature = 0, |
| 115 |
| 116 kLastGLSLFeature = kStandardDerivatives_GLSLFeature |
| 117 }; |
| 118 |
| 119 /** |
| 120 * If the feature is supported then true is returned and any necessary #exte
nsion declarations |
| 121 * are added to the shaders. If the feature is not supported then false will
be returned. |
| 122 */ |
| 123 bool enableFeature(GLSLFeature); |
| 124 |
| 125 /** |
110 * Called by GrGLEffects to add code to one of the shaders. | 126 * Called by GrGLEffects to add code to one of the shaders. |
111 */ | 127 */ |
112 void vsCodeAppendf(const char format[], ...) SK_PRINTF_LIKE(2, 3) { | 128 void vsCodeAppendf(const char format[], ...) SK_PRINTF_LIKE(2, 3) { |
113 va_list args; | 129 va_list args; |
114 va_start(args, format); | 130 va_start(args, format); |
115 this->codeAppendf(kVertex_ShaderType, format, args); | 131 this->codeAppendf(kVertex_ShaderType, format, args); |
116 va_end(args); | 132 va_end(args); |
117 } | 133 } |
118 | 134 |
119 void gsCodeAppendf(const char format[], ...) SK_PRINTF_LIKE(2, 3) { | 135 void gsCodeAppendf(const char format[], ...) SK_PRINTF_LIKE(2, 3) { |
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
306 | 322 |
307 void appendDecls(const VarArray&, SkString*) const; | 323 void appendDecls(const VarArray&, SkString*) const; |
308 void appendUniformDecls(ShaderType, SkString*) const; | 324 void appendUniformDecls(ShaderType, SkString*) const; |
309 | 325 |
310 typedef GrGLUniformManager::BuilderUniform BuilderUniform; | 326 typedef GrGLUniformManager::BuilderUniform BuilderUniform; |
311 GrGLUniformManager::BuilderUniformArray fUniforms; | 327 GrGLUniformManager::BuilderUniformArray fUniforms; |
312 | 328 |
313 // TODO: Everything below here private. | 329 // TODO: Everything below here private. |
314 public: | 330 public: |
315 | 331 |
316 SkString fHeader; // VS+FS, GLSL version, etc | |
317 VarArray fVSAttrs; | 332 VarArray fVSAttrs; |
318 VarArray fVSOutputs; | 333 VarArray fVSOutputs; |
319 VarArray fGSInputs; | 334 VarArray fGSInputs; |
320 VarArray fGSOutputs; | 335 VarArray fGSOutputs; |
321 VarArray fFSInputs; | 336 VarArray fFSInputs; |
322 SkString fGSHeader; // layout qualifiers specific to GS | 337 SkString fGSHeader; // layout qualifiers specific to GS |
323 VarArray fFSOutputs; | 338 VarArray fFSOutputs; |
324 | 339 |
325 private: | 340 private: |
326 enum { | 341 enum { |
327 kNonStageIdx = -1, | 342 kNonStageIdx = -1, |
328 }; | 343 }; |
329 | 344 |
| 345 /** |
| 346 * Features that should only be enabled by GrGLShaderBuilder itself. |
| 347 */ |
| 348 enum GLSLPrivateFeature { |
| 349 kFragCoordConventions_GLSLPrivateFeature = kLastGLSLFeature + 1 |
| 350 }; |
| 351 bool enablePrivateFeature(GLSLPrivateFeature); |
| 352 |
| 353 // If we ever have VS/GS features we can expand this to take a bitmask of Sh
aderType and track |
| 354 // the enables separately for each shader. |
| 355 void addFSFeature(uint32_t featureBit, const char* extensionName); |
| 356 |
330 // Interpretation of DstReadKey when generating code | 357 // Interpretation of DstReadKey when generating code |
331 enum { | 358 enum { |
332 kNoDstRead_DstReadKey = 0, | 359 kNoDstRead_DstReadKey = 0, |
333 kYesDstRead_DstReadKeyBit = 0x1, // Set if we do a dst-copy-read. | 360 kYesDstRead_DstReadKeyBit = 0x1, // Set if we do a dst-copy-read. |
334 kUseAlphaConfig_DstReadKeyBit = 0x2, // Set if dst-copy config is alpha
only. | 361 kUseAlphaConfig_DstReadKeyBit = 0x2, // Set if dst-copy config is alpha
only. |
335 kTopLeftOrigin_DstReadKeyBit = 0x4, // Set if dst-copy origin is top-le
ft. | 362 kTopLeftOrigin_DstReadKeyBit = 0x4, // Set if dst-copy origin is top-le
ft. |
336 }; | 363 }; |
337 | 364 |
338 const GrGLContextInfo& fCtxInfo; | 365 const GrGLContextInfo& fCtxInfo; |
339 GrGLUniformManager& fUniformManager; | 366 GrGLUniformManager& fUniformManager; |
340 int fCurrentStageIdx; | 367 int fCurrentStageIdx; |
| 368 uint32_t fFSFeaturesAddedMask; |
341 SkString fFSFunctions; | 369 SkString fFSFunctions; |
342 SkString fFSHeader; | 370 SkString fFSHeader; |
343 | 371 |
344 bool fUsesGS; | 372 bool fUsesGS; |
345 | 373 |
346 SkString fFSCode; | 374 SkString fFSCode; |
347 SkString fVSCode; | 375 SkString fVSCode; |
348 SkString fGSCode; | 376 SkString fGSCode; |
349 | 377 |
350 bool fSetupFragPosition; | 378 bool fSetupFragPosition; |
351 TextureSampler fDstCopySampler; | 379 TextureSampler fDstCopySampler; |
352 | 380 |
353 GrGLUniformManager::UniformHandle fRTHeightUniform; | 381 GrGLUniformManager::UniformHandle fRTHeightUniform; |
354 GrGLUniformManager::UniformHandle fDstCopyTopLeftUniform; | 382 GrGLUniformManager::UniformHandle fDstCopyTopLeftUniform; |
355 GrGLUniformManager::UniformHandle fDstCopyScaleUniform; | 383 GrGLUniformManager::UniformHandle fDstCopyScaleUniform; |
356 | 384 |
357 SkSTArray<10, AttributePair, true> fEffectAttributes; | 385 SkSTArray<10, AttributePair, true> fEffectAttributes; |
358 | 386 |
359 GrGLShaderVar* fPositionVar; | 387 GrGLShaderVar* fPositionVar; |
360 GrGLShaderVar* fLocalCoordsVar; | 388 GrGLShaderVar* fLocalCoordsVar; |
361 | 389 |
362 }; | 390 }; |
363 | 391 |
364 #endif | 392 #endif |
OLD | NEW |