GrGLShaderBuilder.h revision 040c41a97c58b069015be3f5062eeb6ffe5adbfd
1f9ad8867f2bcd8563862b0a5a90b473ad020d465tomhudson@google.com/* 2f9ad8867f2bcd8563862b0a5a90b473ad020d465tomhudson@google.com * Copyright 2012 Google Inc. 3f9ad8867f2bcd8563862b0a5a90b473ad020d465tomhudson@google.com * 4f9ad8867f2bcd8563862b0a5a90b473ad020d465tomhudson@google.com * Use of this source code is governed by a BSD-style license that can be 5f9ad8867f2bcd8563862b0a5a90b473ad020d465tomhudson@google.com * found in the LICENSE file. 6f9ad8867f2bcd8563862b0a5a90b473ad020d465tomhudson@google.com */ 7f9ad8867f2bcd8563862b0a5a90b473ad020d465tomhudson@google.com 8f9ad8867f2bcd8563862b0a5a90b473ad020d465tomhudson@google.com#ifndef GrGLShaderBuilder_DEFINED 9f9ad8867f2bcd8563862b0a5a90b473ad020d465tomhudson@google.com#define GrGLShaderBuilder_DEFINED 10f9ad8867f2bcd8563862b0a5a90b473ad020d465tomhudson@google.com 11f9ad8867f2bcd8563862b0a5a90b473ad020d465tomhudson@google.com#include "GrAllocator.h" 12f9ad8867f2bcd8563862b0a5a90b473ad020d465tomhudson@google.com#include "gl/GrGLShaderVar.h" 13f9ad8867f2bcd8563862b0a5a90b473ad020d465tomhudson@google.com#include "gl/GrGLSL.h" 14f9ad8867f2bcd8563862b0a5a90b473ad020d465tomhudson@google.com 15f9ad8867f2bcd8563862b0a5a90b473ad020d465tomhudson@google.comtypedef GrTAllocator<GrGLShaderVar> VarArray; 16f9ad8867f2bcd8563862b0a5a90b473ad020d465tomhudson@google.com 17f9ad8867f2bcd8563862b0a5a90b473ad020d465tomhudson@google.com/** 18f9ad8867f2bcd8563862b0a5a90b473ad020d465tomhudson@google.com Containts all the incremental state of a shader as it is being built, 19f9ad8867f2bcd8563862b0a5a90b473ad020d465tomhudson@google.com as well as helpers to manipulate that state. 20f9ad8867f2bcd8563862b0a5a90b473ad020d465tomhudson@google.com TODO: migrate CompileShaders() here? 21f9ad8867f2bcd8563862b0a5a90b473ad020d465tomhudson@google.com*/ 22f9ad8867f2bcd8563862b0a5a90b473ad020d465tomhudson@google.com 23f9ad8867f2bcd8563862b0a5a90b473ad020d465tomhudson@google.comclass GrGLShaderBuilder { 24f9ad8867f2bcd8563862b0a5a90b473ad020d465tomhudson@google.com 25f9ad8867f2bcd8563862b0a5a90b473ad020d465tomhudson@google.compublic: 26f9ad8867f2bcd8563862b0a5a90b473ad020d465tomhudson@google.com 27f9ad8867f2bcd8563862b0a5a90b473ad020d465tomhudson@google.com GrGLShaderBuilder(); 28f9ad8867f2bcd8563862b0a5a90b473ad020d465tomhudson@google.com 29f9ad8867f2bcd8563862b0a5a90b473ad020d465tomhudson@google.com void appendVarying(GrSLType type, 30f9ad8867f2bcd8563862b0a5a90b473ad020d465tomhudson@google.com const char* name, 31f9ad8867f2bcd8563862b0a5a90b473ad020d465tomhudson@google.com const char** vsOutName = NULL, 32f9ad8867f2bcd8563862b0a5a90b473ad020d465tomhudson@google.com const char** fsInName = NULL); 33f9ad8867f2bcd8563862b0a5a90b473ad020d465tomhudson@google.com 34f9ad8867f2bcd8563862b0a5a90b473ad020d465tomhudson@google.com void appendVarying(GrSLType type, 35f9ad8867f2bcd8563862b0a5a90b473ad020d465tomhudson@google.com const char* name, 36f9ad8867f2bcd8563862b0a5a90b473ad020d465tomhudson@google.com int stageNum, 37f9ad8867f2bcd8563862b0a5a90b473ad020d465tomhudson@google.com const char** vsOutName = NULL, 38f9ad8867f2bcd8563862b0a5a90b473ad020d465tomhudson@google.com const char** fsInName = NULL); 39f9ad8867f2bcd8563862b0a5a90b473ad020d465tomhudson@google.com 40f9ad8867f2bcd8563862b0a5a90b473ad020d465tomhudson@google.com GrStringBuilder fHeader; // VS+FS, GLSL version, etc 41f9ad8867f2bcd8563862b0a5a90b473ad020d465tomhudson@google.com VarArray fVSUnis; 42f9ad8867f2bcd8563862b0a5a90b473ad020d465tomhudson@google.com VarArray fVSAttrs; 43f9ad8867f2bcd8563862b0a5a90b473ad020d465tomhudson@google.com VarArray fVSOutputs; 44f9ad8867f2bcd8563862b0a5a90b473ad020d465tomhudson@google.com VarArray fGSInputs; 45f9ad8867f2bcd8563862b0a5a90b473ad020d465tomhudson@google.com VarArray fGSOutputs; 46f9ad8867f2bcd8563862b0a5a90b473ad020d465tomhudson@google.com VarArray fFSInputs; 47f9ad8867f2bcd8563862b0a5a90b473ad020d465tomhudson@google.com GrStringBuilder fGSHeader; // layout qualifiers specific to GS 48f9ad8867f2bcd8563862b0a5a90b473ad020d465tomhudson@google.com VarArray fFSUnis; 49f9ad8867f2bcd8563862b0a5a90b473ad020d465tomhudson@google.com VarArray fFSOutputs; 50f9ad8867f2bcd8563862b0a5a90b473ad020d465tomhudson@google.com GrStringBuilder fFSFunctions; 51f9ad8867f2bcd8563862b0a5a90b473ad020d465tomhudson@google.com GrStringBuilder fVSCode; 52f9ad8867f2bcd8563862b0a5a90b473ad020d465tomhudson@google.com GrStringBuilder fGSCode; 53f9ad8867f2bcd8563862b0a5a90b473ad020d465tomhudson@google.com GrStringBuilder fFSCode; 54040c41a97c58b069015be3f5062eeb6ffe5adbfdtomhudson@google.com bool fUsesGS; 55040c41a97c58b069015be3f5062eeb6ffe5adbfdtomhudson@google.com 56040c41a97c58b069015be3f5062eeb6ffe5adbfdtomhudson@google.com /// Per-stage settings 57040c41a97c58b069015be3f5062eeb6ffe5adbfdtomhudson@google.com //@{ 58f9ad8867f2bcd8563862b0a5a90b473ad020d465tomhudson@google.com 599c639a406eec42c8f5169bd78ad93e58f00ea9f6tomhudson@google.com int fVaryingDims; 609c639a406eec42c8f5169bd78ad93e58f00ea9f6tomhudson@google.com static const int fCoordDims = 2; 619c639a406eec42c8f5169bd78ad93e58f00ea9f6tomhudson@google.com 62040c41a97c58b069015be3f5062eeb6ffe5adbfdtomhudson@google.com /// True if fSampleCoords is an expression; false if it's a bare 63040c41a97c58b069015be3f5062eeb6ffe5adbfdtomhudson@google.com /// variable name 64040c41a97c58b069015be3f5062eeb6ffe5adbfdtomhudson@google.com bool fComplexCoord; 65040c41a97c58b069015be3f5062eeb6ffe5adbfdtomhudson@google.com GrStringBuilder fSampleCoords; 66040c41a97c58b069015be3f5062eeb6ffe5adbfdtomhudson@google.com 67040c41a97c58b069015be3f5062eeb6ffe5adbfdtomhudson@google.com //@} 689c639a406eec42c8f5169bd78ad93e58f00ea9f6tomhudson@google.com 69f9ad8867f2bcd8563862b0a5a90b473ad020d465tomhudson@google.com}; 70f9ad8867f2bcd8563862b0a5a90b473ad020d465tomhudson@google.com 71f9ad8867f2bcd8563862b0a5a90b473ad020d465tomhudson@google.com#endif 72