| Index: src/gpu/gl/GrGLShaderBuilder.h
|
| ===================================================================
|
| --- src/gpu/gl/GrGLShaderBuilder.h (revision 8005)
|
| +++ src/gpu/gl/GrGLShaderBuilder.h (working copy)
|
| @@ -14,6 +14,8 @@
|
| #include "gl/GrGLSL.h"
|
| #include "gl/GrGLUniformManager.h"
|
|
|
| +#include <stdarg.h>
|
| +
|
| class GrGLContextInfo;
|
|
|
| /**
|
| @@ -80,6 +82,34 @@
|
|
|
| GrGLShaderBuilder(const GrGLContextInfo&, GrGLUniformManager&);
|
|
|
| + /**
|
| + * Called by GrGLEffects to add code to one of the shaders.
|
| + */
|
| + void vsCodeAppendf(const char format[], ...) SK_PRINTF_LIKE(2, 3) {
|
| + va_list args;
|
| + va_start(args, format);
|
| + this->codeAppendf(kVertex_ShaderType, format, args);
|
| + va_end(args);
|
| + }
|
| +
|
| + void gsCodeAppendf(const char format[], ...) SK_PRINTF_LIKE(2, 3) {
|
| + va_list args;
|
| + va_start(args, format);
|
| + this->codeAppendf(kGeometry_ShaderType, format, args);
|
| + va_end(args);
|
| + }
|
| +
|
| + void fsCodeAppendf(const char format[], ...) SK_PRINTF_LIKE(2, 3) {
|
| + va_list args;
|
| + va_start(args, format);
|
| + this->codeAppendf(kFragment_ShaderType, format, args);
|
| + va_end(args);
|
| + }
|
| +
|
| + void vsCodeAppend(const char* str) { this->codeAppend(kVertex_ShaderType, str); }
|
| + void gsCodeAppend(const char* str) { this->codeAppend(kGeometry_ShaderType, str); }
|
| + void fsCodeAppend(const char* str) { this->codeAppend(kFragment_ShaderType, str); }
|
| +
|
| /** Appends a 2D texture sample with projection if necessary. coordType must either be Vec2f or
|
| Vec3f. The latter is interpreted as projective texture coords. The vec length and swizzle
|
| order of the result depends on the GrTextureAccess associated with the TextureSampler. */
|
| @@ -88,15 +118,23 @@
|
| const char* coordName,
|
| GrSLType coordType = kVec2f_GrSLType) const;
|
|
|
| + /** Version of above that appends the result to the shader code rather than an SkString.
|
| + Currently the shader type must be kFragment */
|
| + void appendTextureLookup(ShaderType,
|
| + const TextureSampler&,
|
| + const char* coordName,
|
| + GrSLType coordType = kVec2f_GrSLType);
|
| +
|
| +
|
| /** Does the work of appendTextureLookup and modulates the result by modulation. The result is
|
| always a vec4. modulation and the swizzle specified by TextureSampler must both be vec4 or
|
| float. If modulation is "" or NULL it this function acts as though appendTextureLookup were
|
| called. */
|
| - void appendTextureLookupAndModulate(SkString* out,
|
| + void appendTextureLookupAndModulate(ShaderType,
|
| const char* modulation,
|
| const TextureSampler&,
|
| const char* coordName,
|
| - GrSLType coordType = kVec2f_GrSLType) const;
|
| + GrSLType coordType = kVec2f_GrSLType);
|
|
|
| /** Emits a helper function outside of main(). Currently ShaderType must be
|
| kFragment_ShaderType. */
|
| @@ -190,6 +228,9 @@
|
| const GrGLContextInfo& ctxInfo() const { return fCtxInfo; }
|
|
|
| private:
|
| + void codeAppendf(ShaderType type, const char format[], va_list args);
|
| + void codeAppend(ShaderType type, const char* str);
|
| +
|
| typedef GrTAllocator<GrGLShaderVar> VarArray;
|
|
|
| void appendDecls(const VarArray&, SkString*) const;
|
| @@ -209,9 +250,6 @@
|
| VarArray fFSInputs;
|
| SkString fGSHeader; // layout qualifiers specific to GS
|
| VarArray fFSOutputs;
|
| - SkString fVSCode;
|
| - SkString fGSCode;
|
| - SkString fFSCode;
|
| bool fUsesGS;
|
|
|
| private:
|
| @@ -225,6 +263,10 @@
|
| SkString fFSFunctions;
|
| SkString fFSHeader;
|
|
|
| + SkString fFSCode;
|
| + SkString fVSCode;
|
| + SkString fGSCode;
|
| +
|
| bool fSetupFragPosition;
|
| GrGLUniformManager::UniformHandle fRTHeightUniform;
|
|
|
|
|