~thumper/nux/next-changes

« back to all changes in this revision

Viewing changes to NuxGraphics/IOpenGLGLSLShader.h

  • Committer: Neil Jagdish Patel
  • Date: 2010-09-01 21:15:42 UTC
  • Revision ID: neil.patel@canonical.com-20100901211542-cw2ce3ak28unouwb
Add NuxGraphics with licensing

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright 2010 Inalogic Inc.
 
3
 *
 
4
 * This program is free software: you can redistribute it and/or modify it 
 
5
 * under the terms of the GNU Lesser General Public License version 3, as
 
6
 * published by the  Free Software Foundation.
 
7
 *
 
8
 * This program is distributed in the hope that it will be useful, but 
 
9
 * WITHOUT ANY WARRANTY; without even the implied warranties of 
 
10
 * MERCHANTABILITY, SATISFACTORY QUALITY or FITNESS FOR A PARTICULAR 
 
11
 * PURPOSE.  See the applicable version of the GNU Lesser General Public 
 
12
 * License for more details.
 
13
 * 
 
14
 * You should have received a copy of both the GNU Lesser General Public 
 
15
 * License version 3 along with this program.  If not, see 
 
16
 * <http://www.gnu.org/licenses/>
 
17
 *
 
18
 * Authored by: Jay Taoko <jay.taoko_AT_gmail_DOT_com>
 
19
 *
 
20
 */
 
21
 
 
22
 
 
23
#ifndef IOPENGLSHADER_H
 
24
#define IOPENGLSHADER_H
 
25
 
 
26
NAMESPACE_BEGIN_OGL
 
27
 
 
28
class IOpenGLResource;
 
29
 
 
30
bool ExtractShaderString3(const NString &ShaderToken, const NString &ShaderSource, NString &RetSource, NString ShaderPreprocessorDefines = NString(TEXT("")));
 
31
 
 
32
class IOpenGLShader:  public IOpenGLResource
 
33
{
 
34
    DECLARE_OBJECT_TYPE(IOpenGLShader, IOpenGLResource);
 
35
    IOpenGLShader(NString ShaderName, OpenGLResourceType ResourceType);
 
36
    virtual ~IOpenGLShader();
 
37
public:
 
38
    virtual void SetShaderCode(const ANSICHAR* ShaderCode, const TCHAR* ShaderPreprocessorDefines = TEXT("")) = 0;
 
39
    virtual bool Compile() = 0;
 
40
    virtual bool IsValid() = 0;
 
41
    NString _ShaderName;
 
42
    NString _ShaderCode;
 
43
};
 
44
 
 
45
class IOpenGLVertexShader:  public IOpenGLShader
 
46
{
 
47
    DECLARE_OBJECT_TYPE(IOpenGLVertexShader, IOpenGLShader);
 
48
public:
 
49
    virtual ~IOpenGLVertexShader();
 
50
    virtual void SetShaderCode(const ANSICHAR* ShaderCode, const TCHAR* VtxShaderPreprocessorDefines = TEXT(""));
 
51
    virtual bool Compile();
 
52
    virtual bool IsValid();
 
53
private:
 
54
    IOpenGLVertexShader(NString ShaderName=NString("VertexProgram"));
 
55
    int m_CompiledAndReady;
 
56
    friend class GLDeviceFactory;
 
57
};
 
58
 
 
59
class IOpenGLPixelShader:  public IOpenGLShader
 
60
{
 
61
    DECLARE_OBJECT_TYPE(IOpenGLPixelShader, IOpenGLShader);
 
62
public:
 
63
    virtual ~IOpenGLPixelShader();
 
64
    virtual void SetShaderCode(const ANSICHAR* ShaderCode, const TCHAR* FrgShaderPreprocessorDefines = TEXT(""));
 
65
    virtual bool Compile();
 
66
    virtual bool IsValid();
 
67
private:
 
68
    IOpenGLPixelShader(NString ShaderName=NString("PixelProgram"));
 
69
    int m_CompiledAndReady;
 
70
    friend class GLDeviceFactory;
 
71
};
 
72
 
 
73
 
 
74
class IOpenGLShaderProgram:  public IOpenGLResource
 
75
{
 
76
    DECLARE_OBJECT_TYPE(IOpenGLShaderProgram, IOpenGLResource);
 
77
public:
 
78
    virtual ~IOpenGLShaderProgram();
 
79
 
 
80
    // Load an inalogic shader.
 
81
    void LoadVertexShader(const TCHAR* glslshader, const TCHAR* VtxShaderPreprocessorDefines = TEXT(""));
 
82
    void LoadPixelShader(const TCHAR* glslshader, const TCHAR* FrgShaderPreprocessorDefines = TEXT(""));
 
83
    void LoadIShaderFile(const TCHAR* ShaderFileName, const TCHAR* VtxShaderPreprocessorDefines = TEXT(""), const TCHAR* FrgShaderPreprocessorDefines = TEXT(""));
 
84
    void LoadIShader(const TCHAR* ShaderCode, const TCHAR* VtxShaderPreprocessorDefines = TEXT(""), const TCHAR* FrgShaderPreprocessorDefines = TEXT(""));
 
85
    void AddShaderParameter(GLShaderParameter* Parameter);
 
86
    void AddShaderObject(TRefGL<IOpenGLShader> ShaderObject);
 
87
    void RemoveShaderObject(TRefGL<IOpenGLShader> ShaderObject);
 
88
    void ClearShaderObjects();
 
89
    bool Link();
 
90
 
 
91
    void Begin();
 
92
    void End();
 
93
 
 
94
public:
 
95
 
 
96
    bool SetUniform1f(char* varname, GLfloat v0);
 
97
    bool SetUniform2f(char* varname, GLfloat v0, GLfloat v1);
 
98
    bool SetUniform3f(char* varname, GLfloat v0, GLfloat v1, GLfloat v2);
 
99
    bool SetUniform4f(char* varname, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
 
100
 
 
101
    bool SetUniform1i(char* varname, GLint v0);
 
102
    bool SetUniform2i(char* varname, GLint v0, GLint v1);
 
103
    bool SetUniform3i(char* varname, GLint v0, GLint v1, GLint v2);
 
104
    bool SetUniform4i(char* varname, GLint v0, GLint v1, GLint v2, GLint v3);
 
105
 
 
106
    bool SetUniform1fv(char* varname, GLsizei count, GLfloat *value);
 
107
    bool SetUniform2fv(char* varname, GLsizei count, GLfloat *value);
 
108
    bool SetUniform3fv(char* varname, GLsizei count, GLfloat *value);
 
109
    bool SetUniform4fv(char* varname, GLsizei count, GLfloat *value);
 
110
 
 
111
    bool SetUniform1iv(char* varname, GLsizei count, GLint *value);
 
112
    bool SetUniform2iv(char* varname, GLsizei count, GLint *value);
 
113
    bool SetUniform3iv(char* varname, GLsizei count, GLint *value);
 
114
    bool SetUniform4iv(char* varname, GLsizei count, GLint *value);
 
115
 
 
116
    bool SetUniformMatrix2fv(char* varname, GLsizei count, GLboolean transpose, GLfloat *value);
 
117
    bool SetUniformMatrix3fv(char* varname, GLsizei count, GLboolean transpose, GLfloat *value);
 
118
    bool SetUniformMatrix4fv(char* varname, GLsizei count, GLboolean transpose, GLfloat *value);
 
119
 
 
120
 
 
121
    bool SetUniform1f(GLint loc, GLfloat v0);
 
122
    bool SetUniform2f(GLint loc, GLfloat v0, GLfloat v1);
 
123
    bool SetUniform3f(GLint loc, GLfloat v0, GLfloat v1, GLfloat v2);
 
124
    bool SetUniform4f(GLint loc, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
 
125
 
 
126
    bool SetUniform1i(GLint loc, GLint v0);
 
127
    bool SetUniform2i(GLint loc, GLint v0, GLint v1);
 
128
    bool SetUniform3i(GLint loc, GLint v0, GLint v1, GLint v2);
 
129
    bool SetUniform4i(GLint loc, GLint v0, GLint v1, GLint v2, GLint v3);
 
130
 
 
131
    bool SetUniform1fv(GLint loc, GLsizei count, GLfloat *value);
 
132
    bool SetUniform2fv(GLint loc, GLsizei count, GLfloat *value);
 
133
    bool SetUniform3fv(GLint loc, GLsizei count, GLfloat *value);
 
134
    bool SetUniform4fv(GLint loc, GLsizei count, GLfloat *value);
 
135
 
 
136
    bool SetUniform1iv(GLint loc, GLsizei count, GLint *value);
 
137
    bool SetUniform2iv(GLint loc, GLsizei count, GLint *value);
 
138
    bool SetUniform3iv(GLint loc, GLsizei count, GLint *value);
 
139
    bool SetUniform4iv(GLint loc, GLsizei count, GLint *value);
 
140
 
 
141
    bool SetUniformLocMatrix2fv(GLint loc, GLsizei count, GLboolean transpose, GLfloat *value);
 
142
    bool SetUniformLocMatrix3fv(GLint loc, GLsizei count, GLboolean transpose, GLfloat *value);
 
143
    bool SetUniformLocMatrix4fv(GLint loc, GLsizei count, GLboolean transpose, GLfloat *value);
 
144
 
 
145
    void GetUniformfv(char* name, GLfloat* values);
 
146
    void GetUniformiv(char* name, GLint* values); 
 
147
    int GetUniformLocationARB(const GLcharARB* name);
 
148
    void GetActiveUniformARB(GLuint index,
 
149
        GLsizei maxLength,
 
150
        GLsizei *length,
 
151
        GLint *size,
 
152
        GLenum *type,
 
153
        GLcharARB *name);
 
154
 
 
155
    //    glGetObjectParameterARBfv Parameters
 
156
    //        object 
 
157
    //        Specifies the handle of the object to be queried 
 
158
    //
 
159
    //        pname 
 
160
    //        Specifies the an object parameter. Accepted symbolic names are 
 
161
    //        GL_OBJECT_TYPE_ARB , 
 
162
    //        GL_OBJECT_SUBTYPE_ARB, 
 
163
    //        GL_OBJECT_DELETE_STATUS_ARB, 
 
164
    //        GL_OBJECT_LINK_STATUS_ARB, 
 
165
    //        GL_OBJECT_VALIDATE_STATUS_ARB, 
 
166
    //        GL_OBJECT_COMPILE_STATUS_ARB, 
 
167
    //        GL_OBJECT_INFO_LOG_LENGTH_ARB, 
 
168
    //        GL_OBJECT_ATTACHED_OBJECTS_ARB, 
 
169
    //        GL_OBJECT_ACTIVE_ATTRIBUTES_ARB, 
 
170
    //        GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB, 
 
171
    //        GL_OBJECT_ACTIVE_UNIFORMS_ARB, 
 
172
    //        GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB, 
 
173
    //        GL_OBJECT_SHADER_SOURCE_LENGTH_ARB 
 
174
    //
 
175
    //        params 
 
176
    //        Returns the requested object parameter
 
177
    //
 
178
    void GetObjectParameterfvARB(GLenum pname, GLfloat *params);
 
179
    BOOL SetSampler(char* name, int exture_unit);
 
180
 
 
181
    GLShaderParameter* _FirstParameter;
 
182
    void CheckAttributeLocation();
 
183
    void CheckUniformLocation();
 
184
    int GetAttributeLocation(const TCHAR* AttributeName);
 
185
 
 
186
private:
 
187
    IOpenGLShaderProgram(NString ShaderProgramName=NString("ShaderProgram"));
 
188
    ShaderAttributeDefinition m_ProgramAttributeDefinition[16/*NUM_VERTEX_SHADER_INPUT_ATTRIBUTE*/];
 
189
    std::vector<TRefGL<IOpenGLShader> > ShaderObjectList;
 
190
    bool m_CompiledAndReady;
 
191
    NString _ShaderProgramName;
 
192
    friend class GLDeviceFactory;
 
193
};
 
194
 
 
195
NAMESPACE_END_OGL
 
196
 
 
197
#endif // IOPENGLSHADER_H