130ba436f04e61d4505fb854d5fc56079636e0788joshualitt/*
230ba436f04e61d4505fb854d5fc56079636e0788joshualitt * Copyright 2014 Google Inc.
330ba436f04e61d4505fb854d5fc56079636e0788joshualitt *
430ba436f04e61d4505fb854d5fc56079636e0788joshualitt * Use of this source code is governed by a BSD-style license that can be
530ba436f04e61d4505fb854d5fc56079636e0788joshualitt * found in the LICENSE file.
630ba436f04e61d4505fb854d5fc56079636e0788joshualitt */
730ba436f04e61d4505fb854d5fc56079636e0788joshualitt
830ba436f04e61d4505fb854d5fc56079636e0788joshualitt#ifndef GrGLVertexShader_DEFINED
930ba436f04e61d4505fb854d5fc56079636e0788joshualitt#define GrGLVertexShader_DEFINED
1047bb38283072dc87dc93220cd2f370ca109972ffjoshualitt
1130ba436f04e61d4505fb854d5fc56079636e0788joshualitt#include "GrGLShaderBuilder.h"
125bf99f1ca8f30287803b594d06c60a7b6796ad45joshualitt#include "GrGeometryProcessor.h"
1330ba436f04e61d4505fb854d5fc56079636e0788joshualitt
1474077b9941ed3f73d92ba978ef29bf3e6f630cbcjoshualittclass GrGLVarying;
1530ba436f04e61d4505fb854d5fc56079636e0788joshualitt
1647bb38283072dc87dc93220cd2f370ca109972ffjoshualittclass GrGLVertexBuilder : public GrGLShaderBuilder {
1730ba436f04e61d4505fb854d5fc56079636e0788joshualittpublic:
1847bb38283072dc87dc93220cd2f370ca109972ffjoshualitt    GrGLVertexBuilder(GrGLProgramBuilder* program);
1930ba436f04e61d4505fb854d5fc56079636e0788joshualitt
2046d36f0e7b709a077c647841eee23bd3efdc4117robertphillips    void transformToNormalizedDeviceSpace(const GrShaderVar& posVar);
21abb52a1a70a81915c6196e0fb3e9bcb05e8be14djoshualitt    void emitAttributes(const GrGeometryProcessor& gp);
224973d9da4aeb7c4d8b8e67e167586c7cc9534eeejoshualitt
2371c9260e6fa1798ad1e41b2c2ae9b3cce08bb610joshualitt    void addAttribute(const GrGeometryProcessor::Attribute* attr) {
242dd1ae016d7f297b433c3ea3a771ef8e01657c1fjoshualitt        this->addAttribute(GrShaderVar(attr->fName,
252dd1ae016d7f297b433c3ea3a771ef8e01657c1fjoshualitt                                       GrVertexAttribTypeToSLType(attr->fType),
26c375b0b5c5c03d381111bf7bff12507d5ed24769senorblanco                                       GrShaderVar::kAttribute_TypeModifier,
27c375b0b5c5c03d381111bf7bff12507d5ed24769senorblanco                                       GrShaderVar::kNonArray,
28c375b0b5c5c03d381111bf7bff12507d5ed24769senorblanco                                       attr->fPrecision));
292dd1ae016d7f297b433c3ea3a771ef8e01657c1fjoshualitt    }
304973d9da4aeb7c4d8b8e67e167586c7cc9534eeejoshualitt
3174077b9941ed3f73d92ba978ef29bf3e6f630cbcjoshualittprivate:
3230ba436f04e61d4505fb854d5fc56079636e0788joshualitt    /*
3347bb38283072dc87dc93220cd2f370ca109972ffjoshualitt     * Internal call for GrGLProgramBuilder.addVarying
34249af15fb82833d2274850c589812b6e69df0033joshualitt     */
3574077b9941ed3f73d92ba978ef29bf3e6f630cbcjoshualitt    void addVarying(const char* name, GrGLVarying*);
3630ba436f04e61d4505fb854d5fc56079636e0788joshualitt
3730ba436f04e61d4505fb854d5fc56079636e0788joshualitt    /*
3830ba436f04e61d4505fb854d5fc56079636e0788joshualitt     * private helpers for compilation by GrGLProgramBuilder
3930ba436f04e61d4505fb854d5fc56079636e0788joshualitt     */
4047bb38283072dc87dc93220cd2f370ca109972ffjoshualitt    void bindVertexAttributes(GrGLuint programID);
4143466a1ade066f96823dbc7963767da3973afd91joshualitt    bool compileAndAttachShaders(GrGLuint programId, SkTDArray<GrGLuint>* shaderIds);
4230ba436f04e61d4505fb854d5fc56079636e0788joshualitt
4347bb38283072dc87dc93220cd2f370ca109972ffjoshualitt    // an internal call which checks for uniquness of a var before adding it to the list of inputs
4447bb38283072dc87dc93220cd2f370ca109972ffjoshualitt    bool addAttribute(const GrShaderVar& var);
4530ba436f04e61d4505fb854d5fc56079636e0788joshualitt
462dd1ae016d7f297b433c3ea3a771ef8e01657c1fjoshualitt    const char* fRtAdjustName;
4730ba436f04e61d4505fb854d5fc56079636e0788joshualitt
4874077b9941ed3f73d92ba978ef29bf3e6f630cbcjoshualitt    friend class GrGLProgramBuilder;
4974077b9941ed3f73d92ba978ef29bf3e6f630cbcjoshualitt
5047bb38283072dc87dc93220cd2f370ca109972ffjoshualitt    typedef GrGLShaderBuilder INHERITED;
5130ba436f04e61d4505fb854d5fc56079636e0788joshualitt};
5230ba436f04e61d4505fb854d5fc56079636e0788joshualitt
5330ba436f04e61d4505fb854d5fc56079636e0788joshualitt#endif
54