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