2 * Mesa 3-D graphics library
5 * Copyright (C) 2004-2006 Brian Paul All Rights Reserved.
7 * Permission is hereby granted, free of charge, to any person obtaining a
8 * copy of this software and associated documentation files (the "Software"),
9 * to deal in the Software without restriction, including without limitation
10 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
11 * and/or sell copies of the Software, and to permit persons to whom the
12 * Software is furnished to do so, subject to the following conditions:
14 * The above copyright notice and this permission notice shall be included
15 * in all copies or substantial portions of the Software.
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
18 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20 * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
21 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
22 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25 #ifndef SHADEROBJECTS_H
26 #define SHADEROBJECTS_H
30 #if FEATURE_ARB_shader_objects
33 * gl2 unique interface identifier.
34 * Each gl2 interface has its own interface id used for object queries.
38 UIID_UNKNOWN
, /* supported by all objects */
39 UIID_GENERIC
, /* generic object */
40 UIID_CONTAINER
, /* contains generic objects */
41 UIID_SHADER
, /* shader object */
42 UIID_FRAGMENT_SHADER
, /* fragment shader */
43 UIID_VERTEX_SHADER
, /* vertex shader */
44 UIID_PROGRAM
, /* program object */
45 UIID_3DLABS_SHHANDLE
, /* encapsulates 3DLabs' ShHandle */
46 UIID_DEBUG
/* debug object */
49 struct gl2_unknown_intf
51 GLvoid (* AddRef
) (struct gl2_unknown_intf
**);
52 GLvoid (* Release
) (struct gl2_unknown_intf
**);
53 struct gl2_unknown_intf
**(* QueryInterface
) (struct gl2_unknown_intf
**, enum gl2_uiid uiid
);
56 struct gl2_generic_intf
58 struct gl2_unknown_intf _unknown
;
59 GLvoid (* Delete
) (struct gl2_generic_intf
**);
60 GLenum (* GetType
) (struct gl2_generic_intf
**);
61 GLhandleARB (* GetName
) (struct gl2_generic_intf
**);
62 GLboolean (* GetDeleteStatus
) (struct gl2_generic_intf
**);
63 GLvoid (* GetInfoLog
) (struct gl2_generic_intf
**, GLsizei
, GLcharARB
*);
64 GLsizei (* GetInfoLogLength
) (struct gl2_generic_intf
**);
67 struct gl2_container_intf
69 struct gl2_generic_intf _generic
;
70 GLboolean (* Attach
) (struct gl2_container_intf
**, struct gl2_generic_intf
**);
71 GLboolean (* Detach
) (struct gl2_container_intf
**, struct gl2_generic_intf
**);
72 GLsizei (* GetAttachedCount
) (struct gl2_container_intf
**);
73 struct gl2_generic_intf
**(* GetAttached
) (struct gl2_container_intf
**, GLuint
);
76 struct gl2_shader_intf
78 struct gl2_generic_intf _generic
;
79 GLenum (* GetSubType
) (struct gl2_shader_intf
**);
80 GLboolean (* GetCompileStatus
) (struct gl2_shader_intf
**);
81 GLvoid (* SetSource
) (struct gl2_shader_intf
**, GLcharARB
*, GLint
*, GLsizei
);
82 const GLcharARB
*(* GetSource
) (struct gl2_shader_intf
**);
83 GLvoid (* Compile
) (struct gl2_shader_intf
**);
86 struct gl2_program_intf
88 struct gl2_container_intf _container
;
89 GLboolean (* GetLinkStatus
) (struct gl2_program_intf
**);
90 GLboolean (* GetValidateStatus
) (struct gl2_program_intf
**);
91 GLvoid (* Link
) (struct gl2_program_intf
**);
92 GLvoid (* Validate
) (struct gl2_program_intf
**);
93 GLvoid (* UpdateFixedUniforms
) (struct gl2_program_intf
**);
94 GLvoid (* UpdateFixedAttrib
) (struct gl2_program_intf
**, GLuint
, GLvoid
*, GLuint
, GLuint
,
96 GLvoid (* UpdateFixedVarying
) (struct gl2_program_intf
**, GLuint
, GLvoid
*, GLuint
, GLuint
,
98 GLvoid (* GetTextureImageUsage
) (struct gl2_program_intf
**, GLbitfield
*);
99 GLboolean (* IsShaderPresent
) (struct gl2_program_intf
**, GLenum
);
100 GLvoid (* GetActiveUniform
) (struct gl2_program_intf
**, GLuint index
, GLsizei maxLength
,
101 GLsizei
*length
, GLint
*size
, GLenum
*type
, GLchar
*name
);
102 GLuint (* GetActiveUniformMaxLength
) (struct gl2_program_intf
**);
103 GLuint (* GetActiveUniformCount
) (struct gl2_program_intf
**);
104 GLint (* GetUniformLocation
) (struct gl2_program_intf
**, const GLchar
*name
);
105 GLboolean (* WriteUniform
) (struct gl2_program_intf
**, GLint loc
, GLsizei count
,
106 const GLvoid
*data
, GLenum type
);
107 GLboolean (* ReadUniform
) (struct gl2_program_intf
**, GLint loc
, GLsizei count
,
108 GLvoid
*data
, GLenum type
);
109 GLvoid (* GetActiveAttrib
) (struct gl2_program_intf
**, GLuint index
, GLsizei maxLength
,
110 GLsizei
*length
, GLint
*size
, GLenum
*type
, GLchar
*name
);
111 GLuint (* GetActiveAttribMaxLength
) (struct gl2_program_intf
**);
112 GLuint (* GetActiveAttribCount
) (struct gl2_program_intf
**);
113 GLint (* GetAttribLocation
) (struct gl2_program_intf
**, const GLchar
*name
);
114 GLvoid (* OverrideAttribBinding
) (struct gl2_program_intf
**, GLuint
, const GLchar
*);
115 GLvoid (* WriteAttrib
) (struct gl2_program_intf
**, GLuint
, const GLfloat
*);
116 GLvoid (* UpdateVarying
) (struct gl2_program_intf
**, GLuint
, GLfloat
*, GLboolean
);
119 struct gl2_fragment_shader_intf
121 struct gl2_shader_intf _shader
;
124 struct gl2_vertex_shader_intf
126 struct gl2_shader_intf _shader
;
129 struct gl2_3dlabs_shhandle_intf
131 struct gl2_unknown_intf _unknown
;
132 GLvoid
*(* GetShHandle
) (struct gl2_3dlabs_shhandle_intf
**);
135 struct gl2_debug_intf
137 struct gl2_generic_intf _generic
;
138 GLvoid (* ClearDebugLog
) (struct gl2_debug_intf
**, GLenum logType
, GLenum shaderType
);
139 GLvoid (* GetDebugLog
) (struct gl2_debug_intf
**, GLenum logType
, GLenum shaderType
,
140 GLsizei maxLength
, GLsizei
*length
, GLcharARB
*infoLog
);
141 GLsizei (* GetDebugLogLength
) (struct gl2_debug_intf
**, GLenum logType
, GLenum shaderType
);
145 extern void GLAPIENTRY
146 _mesa_DeleteObjectARB(GLhandleARB obj
);
148 extern GLhandleARB GLAPIENTRY
149 _mesa_GetHandleARB(GLenum pname
);
151 extern void GLAPIENTRY
152 _mesa_DetachObjectARB (GLhandleARB
, GLhandleARB
);
154 extern GLhandleARB GLAPIENTRY
155 _mesa_CreateShaderObjectARB (GLenum
);
157 extern void GLAPIENTRY
158 _mesa_ShaderSourceARB (GLhandleARB
, GLsizei
, const GLcharARB
* *, const GLint
*);
160 extern void GLAPIENTRY
161 _mesa_CompileShaderARB (GLhandleARB
);
163 extern GLhandleARB GLAPIENTRY
164 _mesa_CreateProgramObjectARB (void);
166 extern void GLAPIENTRY
167 _mesa_AttachObjectARB (GLhandleARB
, GLhandleARB
);
169 extern void GLAPIENTRY
170 _mesa_LinkProgramARB (GLhandleARB
);
172 extern void GLAPIENTRY
173 _mesa_UseProgramObjectARB (GLhandleARB
);
175 extern void GLAPIENTRY
176 _mesa_ValidateProgramARB (GLhandleARB
);
178 extern void GLAPIENTRY
179 _mesa_Uniform1fARB (GLint
, GLfloat
);
181 extern void GLAPIENTRY
182 _mesa_Uniform2fARB (GLint
, GLfloat
, GLfloat
);
184 extern void GLAPIENTRY
185 _mesa_Uniform3fARB (GLint
, GLfloat
, GLfloat
, GLfloat
);
187 extern void GLAPIENTRY
188 _mesa_Uniform4fARB (GLint
, GLfloat
, GLfloat
, GLfloat
, GLfloat
);
190 extern void GLAPIENTRY
191 _mesa_Uniform1iARB (GLint
, GLint
);
193 extern void GLAPIENTRY
194 _mesa_Uniform2iARB (GLint
, GLint
, GLint
);
196 extern void GLAPIENTRY
197 _mesa_Uniform3iARB (GLint
, GLint
, GLint
, GLint
);
199 extern void GLAPIENTRY
200 _mesa_Uniform4iARB (GLint
, GLint
, GLint
, GLint
, GLint
);
202 extern void GLAPIENTRY
203 _mesa_Uniform1fvARB (GLint
, GLsizei
, const GLfloat
*);
205 extern void GLAPIENTRY
206 _mesa_Uniform2fvARB (GLint
, GLsizei
, const GLfloat
*);
208 extern void GLAPIENTRY
209 _mesa_Uniform3fvARB (GLint
, GLsizei
, const GLfloat
*);
211 extern void GLAPIENTRY
212 _mesa_Uniform4fvARB (GLint
, GLsizei
, const GLfloat
*);
214 extern void GLAPIENTRY
215 _mesa_Uniform1ivARB (GLint
, GLsizei
, const GLint
*);
217 extern void GLAPIENTRY
218 _mesa_Uniform2ivARB (GLint
, GLsizei
, const GLint
*);
220 extern void GLAPIENTRY
221 _mesa_Uniform3ivARB (GLint
, GLsizei
, const GLint
*);
223 extern void GLAPIENTRY
224 _mesa_Uniform4ivARB (GLint
, GLsizei
, const GLint
*);
226 extern void GLAPIENTRY
227 _mesa_UniformMatrix2fvARB (GLint
, GLsizei
, GLboolean
, const GLfloat
*);
229 extern void GLAPIENTRY
230 _mesa_UniformMatrix3fvARB (GLint
, GLsizei
, GLboolean
, const GLfloat
*);
232 extern void GLAPIENTRY
233 _mesa_UniformMatrix4fvARB (GLint
, GLsizei
, GLboolean
, const GLfloat
*);
235 extern void GLAPIENTRY
236 _mesa_GetObjectParameterfvARB (GLhandleARB
, GLenum
, GLfloat
*);
238 extern void GLAPIENTRY
239 _mesa_GetObjectParameterivARB (GLhandleARB
, GLenum
, GLint
*);
241 extern void GLAPIENTRY
242 _mesa_GetInfoLogARB (GLhandleARB
, GLsizei
, GLsizei
*, GLcharARB
*);
244 extern void GLAPIENTRY
245 _mesa_GetAttachedObjectsARB (GLhandleARB
, GLsizei
, GLsizei
*, GLhandleARB
*);
247 extern GLint GLAPIENTRY
248 _mesa_GetUniformLocationARB (GLhandleARB
, const GLcharARB
*);
250 extern void GLAPIENTRY
251 _mesa_GetActiveUniformARB (GLhandleARB
, GLuint
, GLsizei
, GLsizei
*, GLint
*, GLenum
*, GLcharARB
*);
253 extern void GLAPIENTRY
254 _mesa_GetUniformfvARB (GLhandleARB
, GLint
, GLfloat
*);
256 extern void GLAPIENTRY
257 _mesa_GetUniformivARB (GLhandleARB
, GLint
, GLint
*);
259 extern void GLAPIENTRY
260 _mesa_GetShaderSourceARB (GLhandleARB
, GLsizei
, GLsizei
*, GLcharARB
*);
262 #if FEATURE_ARB_vertex_shader
264 extern void GLAPIENTRY
265 _mesa_BindAttribLocationARB (GLhandleARB
, GLuint
, const GLcharARB
*);
267 extern void GLAPIENTRY
268 _mesa_GetActiveAttribARB (GLhandleARB
, GLuint
, GLsizei
, GLsizei
*, GLint
*, GLenum
*, GLcharARB
*);
270 extern GLint GLAPIENTRY
271 _mesa_GetAttribLocationARB (GLhandleARB
, const GLcharARB
*);
273 #endif /* FEATURE_ARB_vertex_shader */
277 extern void GLAPIENTRY
278 _mesa_AttachShader(GLuint program
, GLuint shader
);
280 extern GLuint GLAPIENTRY
281 _mesa_CreateShader(GLenum
);
283 extern GLuint GLAPIENTRY
284 _mesa_CreateProgram(void);
286 extern void GLAPIENTRY
287 _mesa_DeleteProgram(GLuint program
);
289 extern void GLAPIENTRY
290 _mesa_DeleteShader(GLuint shader
);
292 extern void GLAPIENTRY
293 _mesa_DetachShader(GLuint program
, GLuint shader
);
295 extern void GLAPIENTRY
296 _mesa_GetAttachedShaders(GLuint program
, GLsizei maxCount
,
297 GLsizei
*count
, GLuint
*obj
);
299 extern void GLAPIENTRY
300 _mesa_GetProgramiv(GLuint program
, GLenum pname
, GLint
*params
);
302 extern void GLAPIENTRY
303 _mesa_GetProgramInfoLog(GLuint program
, GLsizei bufSize
,
304 GLsizei
*length
, GLchar
*infoLog
);
306 extern void GLAPIENTRY
307 _mesa_GetShaderiv(GLuint shader
, GLenum pname
, GLint
*params
);
309 extern void GLAPIENTRY
310 _mesa_GetShaderInfoLog(GLuint shader
, GLsizei bufSize
,
311 GLsizei
*length
, GLchar
*infoLog
);
313 extern GLboolean GLAPIENTRY
314 _mesa_IsProgram(GLuint program
);
316 extern GLboolean GLAPIENTRY
317 _mesa_IsShader(GLuint shader
);
322 extern void GLAPIENTRY
323 _mesa_UniformMatrix2x3fv(GLint location
, GLsizei count
, GLboolean transpose
,
324 const GLfloat
*value
);
326 extern void GLAPIENTRY
327 _mesa_UniformMatrix3x2fv(GLint location
, GLsizei count
, GLboolean transpose
,
328 const GLfloat
*value
);
330 extern void GLAPIENTRY
331 _mesa_UniformMatrix2x4fv(GLint location
, GLsizei count
, GLboolean transpose
,
332 const GLfloat
*value
);
334 extern void GLAPIENTRY
335 _mesa_UniformMatrix4x2fv(GLint location
, GLsizei count
, GLboolean transpose
,
336 const GLfloat
*value
);
338 extern void GLAPIENTRY
339 _mesa_UniformMatrix3x4fv(GLint location
, GLsizei count
, GLboolean transpose
,
340 const GLfloat
*value
);
342 extern void GLAPIENTRY
343 _mesa_UniformMatrix4x3fv(GLint location
, GLsizei count
, GLboolean transpose
,
344 const GLfloat
*value
);
348 #endif /* FEATURE_ARB_shader_objects */
351 _mesa_init_shaderobjects (GLcontext
*ctx
);
353 #endif /* SHADEROBJECTS_H */