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