| /* |
| * 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 GrGLProgramBuilder_DEFINED |
| #define GrGLProgramBuilder_DEFINED |
| |
| #include "GrPipeline.h" |
| #include "gl/GrGLProgramDataManager.h" |
| #include "gl/GrGLUniformHandler.h" |
| #include "gl/GrGLVaryingHandler.h" |
| #include "glsl/GrGLSLProgramBuilder.h" |
| #include "glsl/GrGLSLProgramDataManager.h" |
| |
| class GrFragmentProcessor; |
| class GrGLContextInfo; |
| class GrGLSLShaderBuilder; |
| class GrGLSLCaps; |
| |
| class GrGLProgramBuilder : public GrGLSLProgramBuilder { |
| public: |
| /** Generates a shader program. |
| * |
| * The program implements what is specified in the stages given as input. |
| * After successful generation, the builder result objects are available |
| * to be used. |
| * @return true if generation was successful. |
| */ |
| static GrGLProgram* CreateProgram(const DrawArgs&, GrGLGpu*); |
| |
| const GrCaps* caps() const override; |
| const GrGLSLCaps* glslCaps() const override; |
| |
| GrGLGpu* gpu() const { return fGpu; } |
| |
| private: |
| GrGLProgramBuilder(GrGLGpu*, const DrawArgs&); |
| |
| void emitSamplers(const GrProcessor&, |
| GrGLSLTextureSampler::TextureSamplerArray* outSamplers) override; |
| |
| bool compileAndAttachShaders(GrGLSLShaderBuilder& shader, |
| GrGLuint programId, |
| GrGLenum type, |
| SkTDArray<GrGLuint>* shaderIds); |
| GrGLProgram* finalize(); |
| void bindProgramResourceLocations(GrGLuint programID); |
| bool checkLinkStatus(GrGLuint programID); |
| void resolveProgramResourceLocations(GrGLuint programID); |
| void cleanupProgram(GrGLuint programID, const SkTDArray<GrGLuint>& shaderIDs); |
| void cleanupShaders(const SkTDArray<GrGLuint>& shaderIDs); |
| |
| // Subclasses create different programs |
| GrGLProgram* createProgram(GrGLuint programID); |
| |
| GrGLSLUniformHandler* uniformHandler() override { return &fUniformHandler; } |
| const GrGLSLUniformHandler* uniformHandler() const override { return &fUniformHandler; } |
| GrGLSLVaryingHandler* varyingHandler() override { return &fVaryingHandler; } |
| |
| |
| GrGLGpu* fGpu; |
| typedef GrGLSLUniformHandler::UniformHandle UniformHandle; |
| SkTArray<UniformHandle> fSamplerUniforms; |
| |
| GrGLVaryingHandler fVaryingHandler; |
| GrGLUniformHandler fUniformHandler; |
| |
| typedef GrGLSLProgramBuilder INHERITED; |
| }; |
| #endif |