2
* Copyright 2010 Inalogic Inc.
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.
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.
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/>
18
* Authored by: Jay Taoko <jay.taoko_AT_gmail_DOT_com>
23
#ifndef IOPENGLSHADER_H
24
#define IOPENGLSHADER_H
28
class IOpenGLResource;
30
bool ExtractShaderString3(const NString &ShaderToken, const NString &ShaderSource, NString &RetSource, NString ShaderPreprocessorDefines = NString(TEXT("")));
32
class IOpenGLShader: public IOpenGLResource
34
DECLARE_OBJECT_TYPE(IOpenGLShader, IOpenGLResource);
35
IOpenGLShader(NString ShaderName, OpenGLResourceType ResourceType);
36
virtual ~IOpenGLShader();
38
virtual void SetShaderCode(const ANSICHAR* ShaderCode, const TCHAR* ShaderPreprocessorDefines = TEXT("")) = 0;
39
virtual bool Compile() = 0;
40
virtual bool IsValid() = 0;
45
class IOpenGLVertexShader: public IOpenGLShader
47
DECLARE_OBJECT_TYPE(IOpenGLVertexShader, IOpenGLShader);
49
virtual ~IOpenGLVertexShader();
50
virtual void SetShaderCode(const ANSICHAR* ShaderCode, const TCHAR* VtxShaderPreprocessorDefines = TEXT(""));
51
virtual bool Compile();
52
virtual bool IsValid();
54
IOpenGLVertexShader(NString ShaderName=NString("VertexProgram"));
55
int m_CompiledAndReady;
56
friend class GLDeviceFactory;
59
class IOpenGLPixelShader: public IOpenGLShader
61
DECLARE_OBJECT_TYPE(IOpenGLPixelShader, IOpenGLShader);
63
virtual ~IOpenGLPixelShader();
64
virtual void SetShaderCode(const ANSICHAR* ShaderCode, const TCHAR* FrgShaderPreprocessorDefines = TEXT(""));
65
virtual bool Compile();
66
virtual bool IsValid();
68
IOpenGLPixelShader(NString ShaderName=NString("PixelProgram"));
69
int m_CompiledAndReady;
70
friend class GLDeviceFactory;
74
class IOpenGLShaderProgram: public IOpenGLResource
76
DECLARE_OBJECT_TYPE(IOpenGLShaderProgram, IOpenGLResource);
78
virtual ~IOpenGLShaderProgram();
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();
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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,
155
// glGetObjectParameterARBfv Parameters
157
// Specifies the handle of the object to be queried
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
176
// Returns the requested object parameter
178
void GetObjectParameterfvARB(GLenum pname, GLfloat *params);
179
BOOL SetSampler(char* name, int exture_unit);
181
GLShaderParameter* _FirstParameter;
182
void CheckAttributeLocation();
183
void CheckUniformLocation();
184
int GetAttributeLocation(const TCHAR* AttributeName);
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;
197
#endif // IOPENGLSHADER_H