| Index: src/gpu/gl/builders/GrGLVertexShaderBuilder.h
|
| diff --git a/src/gpu/gl/builders/GrGLVertexShaderBuilder.h b/src/gpu/gl/builders/GrGLVertexShaderBuilder.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..c576f5788210ddabf7eb2f371a90ef1a520aee3b
|
| --- /dev/null
|
| +++ b/src/gpu/gl/builders/GrGLVertexShaderBuilder.h
|
| @@ -0,0 +1,81 @@
|
| +/*
|
| + * 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 GrGLVertexShader_DEFINED
|
| +#define GrGLVertexShader_DEFINED
|
| +#include "GrGLShaderBuilder.h"
|
| +
|
| +class GrGLProgramBuilder;
|
| +
|
| +class GrGLVertexShaderBuilder : public GrGLFullShaderBuilder {
|
| +public:
|
| + GrGLVertexShaderBuilder(GrGLFullProgramBuilder* program);
|
| +
|
| + /*
|
| + * Add attribute will push a new attribute onto the end. It will also assert if there is
|
| + * a duplicate attribute
|
| + */
|
| + bool addAttribute(GrSLType type, const char* name);
|
| +
|
| + bool addEffectAttribute(int attributeIndex, GrSLType type, const SkString& name);
|
| +
|
| + /*
|
| + * this call is only for GrGLProgramEffects' internal use
|
| + */
|
| + void emitAttributes(const GrEffectStage& stage);
|
| +
|
| + /**
|
| + * Are explicit local coordinates provided as input to the vertex shader.
|
| + */
|
| + bool hasExplicitLocalCoords() const { return (fLocalCoordsVar != fPositionVar); }
|
| +
|
| + const SkString* getEffectAttributeName(int attributeIndex) const;
|
| +
|
| + /** Returns a vertex attribute that represents the local coords in the VS. This may be the same
|
| + as positionAttribute() or it may not be. It depends upon whether the rendering code
|
| + specified explicit local coords or not in the GrDrawState. */
|
| + const GrGLShaderVar& localCoordsAttribute() const { return *fLocalCoordsVar; }
|
| +
|
| + /** Returns a vertex attribute that represents the vertex position in the VS. This is the
|
| + pre-matrix position and is commonly used by effects to compute texture coords via a matrix.
|
| + */
|
| + const GrGLShaderVar& positionAttribute() const { return *fPositionVar; }
|
| +
|
| +private:
|
| + /*
|
| + * Internal call for GrGLFullProgramBuilder.addVarying
|
| + */
|
| + void addVarying(GrSLType type,
|
| + const char* name,
|
| + const char** vsOutName);
|
| +
|
| + /*
|
| + * private helpers for compilation by GrGLProgramBuilder
|
| + */
|
| + void bindProgramLocations(GrGLuint programId);
|
| + bool compileAndAttachShaders(GrGLuint programId, SkTDArray<GrGLuint>* shaderIds) const;
|
| + void emitCodeBeforeEffects(GrGLSLExpr4* color, GrGLSLExpr4* coverage);
|
| + void emitCodeAfterEffects();
|
| +
|
| + struct AttributePair {
|
| + void set(int index, const SkString& name) {
|
| + fIndex = index; fName = name;
|
| + }
|
| + int fIndex;
|
| + SkString fName;
|
| + };
|
| +
|
| + SkSTArray<10, AttributePair, true> fEffectAttributes;
|
| + GrGLShaderVar* fPositionVar;
|
| + GrGLShaderVar* fLocalCoordsVar;
|
| +
|
| + friend class GrGLFullProgramBuilder;
|
| +
|
| + typedef GrGLFullShaderBuilder INHERITED;
|
| +};
|
| +
|
| +#endif
|
|
|