| /* |
| * 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 GrGLNvprProgramBuilder_DEFINED |
| #define GrGLNvprProgramBuilder_DEFINED |
| |
| #include "GrGLProgramBuilder.h" |
| |
| class GrGLNvprProgramBuilder : public GrGLProgramBuilder { |
| public: |
| GrGLNvprProgramBuilder(GrGLGpu*, const GrOptDrawState&); |
| |
| /* |
| * The separable varying info must be passed to GrGLProgram so this must |
| * be part of the public interface |
| */ |
| struct SeparableVaryingInfo { |
| GrGLShaderVar fVariable; |
| GrGLint fLocation; |
| }; |
| |
| typedef GrTAllocator<SeparableVaryingInfo> SeparableVaryingInfoArray; |
| |
| virtual GrGLProgram* createProgram(GrGLuint programID) SK_OVERRIDE; |
| |
| private: |
| virtual void emitTransforms(const GrPendingFragmentStage&, |
| GrGLProcessor::TransformedCoordsArray* outCoords, |
| GrGLInstalledFragProc*) SK_OVERRIDE; |
| |
| typedef GrGLInstalledFragProc::ShaderVarHandle ShaderVarHandle; |
| |
| /** |
| * Add a separable varying input variable to the current program. |
| * A separable varying (fragment shader input) is a varying that can be used also when vertex |
| * shaders are not used. With a vertex shader, the operation is same as with other |
| * varyings. Without a vertex shader, such as with NV_path_rendering, GL APIs are used to |
| * populate the variable. The APIs can refer to the variable through the returned handle. |
| */ |
| ShaderVarHandle addSeparableVarying(const char* name, GrGLVarying* v); |
| |
| void resolveSeparableVaryings(GrGLuint programId); |
| |
| SeparableVaryingInfoArray fSeparableVaryingInfos; |
| |
| typedef GrGLProgramBuilder INHERITED; |
| }; |
| |
| #endif |