Index: src/gpu/gl/builders/GrGLShaderBuilder.h |
diff --git a/src/gpu/gl/builders/GrGLShaderBuilder.h b/src/gpu/gl/builders/GrGLShaderBuilder.h |
deleted file mode 100644 |
index 2978db3a6465f0ae95efb3a98f92f08e6266c597..0000000000000000000000000000000000000000 |
--- a/src/gpu/gl/builders/GrGLShaderBuilder.h |
+++ /dev/null |
@@ -1,200 +0,0 @@ |
-/* |
- * Copyright 2014 Google Inc. |
- * |
- * Use of this source code is governed by a BSD-style license that can be |
- * found in the LICENSE file. |
- */ |
- |
-#ifndef GrGLShaderBuilder_DEFINED |
-#define GrGLShaderBuilder_DEFINED |
- |
-#include "GrAllocator.h" |
-#include "glsl/GrGLSLShaderVar.h" |
-#include "SkTDArray.h" |
- |
-#include <stdarg.h> |
- |
-class GrGLSLProgramBuilder; |
-class GrGLSLTextureSampler; |
- |
-/** |
- base class for all shaders builders |
-*/ |
-class GrGLShaderBuilder { |
-public: |
- GrGLShaderBuilder(GrGLSLProgramBuilder* program); |
- virtual ~GrGLShaderBuilder() {} |
- |
- void addInput(const GrGLSLShaderVar& input) { fInputs.push_back(input); } |
- void addOutput(const GrGLSLShaderVar& output) { fOutputs.push_back(output); } |
- |
- /* |
- * We put texture lookups in the base class because it is TECHNICALLY possible to do texture |
- * lookups in any kind of shader. However, for the time being using these calls on non-fragment |
- * shaders will result in a shader compilation error as texture sampler uniforms are only |
- * visible to the fragment shader. It would not be hard to change this behavior, if someone |
- * actually wants to do texture lookups in a non-fragment shader |
- * |
- * TODO if append texture lookup is used on a non-fragment shader, sampler uniforms should be |
- * made visible to that shaders |
- */ |
- /** 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 GrGLSLTextureSampler. |
- */ |
- void appendTextureLookup(SkString* out, |
- const GrGLSLTextureSampler&, |
- const char* coordName, |
- GrSLType coordType = kVec2f_GrSLType) const; |
- |
- /** Version of above that appends the result to the fragment shader code instead.*/ |
- void appendTextureLookup(const GrGLSLTextureSampler&, |
- 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 GrGLSLTextureSampler must both be |
- vec4 or float. If modulation is "" or nullptr it this function acts as though |
- appendTextureLookup were called. */ |
- void appendTextureLookupAndModulate(const char* modulation, |
- const GrGLSLTextureSampler&, |
- const char* coordName, |
- GrSLType coordType = kVec2f_GrSLType); |
- |
- /** |
- * Called by GrGLProcessors to add code to one of the shaders. |
- */ |
- void codeAppendf(const char format[], ...) SK_PRINTF_LIKE(2, 3) { |
- va_list args; |
- va_start(args, format); |
- this->code().appendVAList(format, args); |
- va_end(args); |
- } |
- |
- void codeAppend(const char* str) { this->code().append(str); } |
- |
- void codePrependf(const char format[], ...) SK_PRINTF_LIKE(2, 3) { |
- va_list args; |
- va_start(args, format); |
- this->code().prependVAList(format, args); |
- va_end(args); |
- } |
- |
- /** |
- * Appends a variable declaration to one of the shaders |
- */ |
- void declAppend(const GrGLSLShaderVar& var); |
- |
- /** Emits a helper function outside of main() in the fragment shader. */ |
- void emitFunction(GrSLType returnType, |
- const char* name, |
- int argCnt, |
- const GrGLSLShaderVar* args, |
- const char* body, |
- SkString* outName); |
- |
- /* |
- * Combines the various parts of the shader to create a single finalized shader string. |
- */ |
- void finalize(uint32_t visibility); |
- |
- /* |
- * Get parent builder for adding uniforms |
- */ |
- GrGLSLProgramBuilder* getProgramBuilder() { return fProgramBuilder; } |
- |
- /** |
- * Helper for begining and ending a block in the shader code. |
- */ |
- class ShaderBlock { |
- public: |
- ShaderBlock(GrGLShaderBuilder* builder) : fBuilder(builder) { |
- SkASSERT(builder); |
- fBuilder->codeAppend("{"); |
- } |
- |
- ~ShaderBlock() { |
- fBuilder->codeAppend("}"); |
- } |
- private: |
- GrGLShaderBuilder* fBuilder; |
- }; |
- |
-protected: |
- typedef GrTAllocator<GrGLSLShaderVar> VarArray; |
- void appendDecls(const VarArray& vars, SkString* out) const; |
- |
- /* |
- * A general function which enables an extension in a shader if the feature bit is not present |
- */ |
- void addFeature(uint32_t featureBit, const char* extensionName); |
- |
- enum InterfaceQualifier { |
- kOut_InterfaceQualifier, |
- kLastInterfaceQualifier = kOut_InterfaceQualifier |
- }; |
- |
- /* |
- * A low level function to build default layout qualifiers. |
- * |
- * e.g. layout(param1, param2, ...) out; |
- * |
- * GLSL allows default layout qualifiers for in, out, and uniform. |
- */ |
- void addLayoutQualifier(const char* param, InterfaceQualifier); |
- |
- void compileAndAppendLayoutQualifiers(); |
- |
- void nextStage() { |
- fShaderStrings.push_back(); |
- fCompilerStrings.push_back(this->code().c_str()); |
- fCompilerStringLengths.push_back((int)this->code().size()); |
- fCodeIndex++; |
- } |
- |
- SkString& versionDecl() { return fShaderStrings[kVersionDecl]; } |
- SkString& extensions() { return fShaderStrings[kExtensions]; } |
- SkString& precisionQualifier() { return fShaderStrings[kPrecisionQualifier]; } |
- SkString& layoutQualifiers() { return fShaderStrings[kLayoutQualifiers]; } |
- SkString& uniforms() { return fShaderStrings[kUniforms]; } |
- SkString& inputs() { return fShaderStrings[kInputs]; } |
- SkString& outputs() { return fShaderStrings[kOutputs]; } |
- SkString& functions() { return fShaderStrings[kFunctions]; } |
- SkString& main() { return fShaderStrings[kMain]; } |
- SkString& code() { return fShaderStrings[fCodeIndex]; } |
- |
- virtual void onFinalize() = 0; |
- |
- enum { |
- kVersionDecl, |
- kExtensions, |
- kPrecisionQualifier, |
- kLayoutQualifiers, |
- kUniforms, |
- kInputs, |
- kOutputs, |
- kFunctions, |
- kMain, |
- kCode, |
- }; |
- |
- GrGLSLProgramBuilder* fProgramBuilder; |
- SkSTArray<kCode, const char*, true> fCompilerStrings; |
- SkSTArray<kCode, int, true> fCompilerStringLengths; |
- SkSTArray<kCode, SkString> fShaderStrings; |
- SkString fCode; |
- SkString fFunctions; |
- SkString fExtensions; |
- |
- VarArray fInputs; |
- VarArray fOutputs; |
- uint32_t fFeaturesAddedMask; |
- SkSTArray<1, SkString> fLayoutParams[kLastInterfaceQualifier + 1]; |
- int fCodeIndex; |
- bool fFinalized; |
- |
- friend class GrGLProgramBuilder; |
- friend class GrGLPathProgramBuilder; // to access fInputs. |
-}; |
-#endif |