18 #define WIN32_LEAN_AND_MEAN
21 #include "graphics/gl/gl.h"
22 #include "graphics/gl/glu.h"
23 #include "graphics/gl/glext.h"
26 #define STUB_FUNCTION 0
27 #elif defined(SCP_UNIX)
29 #define GL_GLEXT_LEGACY // I'd like to punch the idiot that made this needed
30 #include <OpenGL/gl.h>
31 #include <OpenGL/glu.h>
32 #define GL_GLEXT_FUNCTION_POINTERS // we need the ptr versions of the functions
33 #include <OpenGL/glext.h>
50 #define APIENTRYP APIENTRY *
54 #ifndef GL_ARB_pixel_buffer_object
55 #define GL_ARB_pixel_buffer_object 1
56 #define GL_PIXEL_PACK_BUFFER_ARB 0x88EB
57 #define GL_PIXEL_UNPACK_BUFFER_ARB 0x88EC
58 #define GL_PIXEL_PACK_BUFFER_BINDING_ARB 0x88ED
59 #define GL_PIXEL_UNPACK_BUFFER_BINDING_ARB 0x88EF
62 #ifndef GL_ARB_texture_rectangle
63 #define GL_ARB_texture_rectangle 1
64 #define GL_TEXTURE_RECTANGLE_ARB 0x84F5
65 #define GL_TEXTURE_BINDING_RECTANGLE_ARB 0x84F6
66 #define GL_PROXY_TEXTURE_RECTANGLE_ARB 0x84F7
67 #define GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB 0x84F8
70 #ifndef GL_VERSION_1_4
71 #define GL_MAX_TEXTURE_LOD_BIAS 0x84FD
72 #define GL_TEXTURE_FILTER_CONTROL 0x8500
73 #define GL_TEXTURE_LOD_BIAS 0x8501
76 #ifndef GL_VERSION_1_5
77 #define GL_READ_ONLY 0x88B8
78 #define GL_WRITE_ONLY 0x88B9
79 #define GL_READ_WRITE 0x88BA
80 #define GL_BUFFER_ACCESS 0x88BB
81 #define GL_BUFFER_MAPPED 0x88BC
82 #define GL_BUFFER_MAP_POINTER 0x88BD
83 #define GL_STREAM_DRAW 0x88E0
84 #define GL_STREAM_READ 0x88E1
85 #define GL_STREAM_COPY 0x88E2
86 #define GL_STATIC_DRAW 0x88E4
87 #define GL_STATIC_READ 0x88E5
88 #define GL_STATIC_COPY 0x88E6
89 #define GL_DYNAMIC_DRAW 0x88E8
90 #define GL_DYNAMIC_READ 0x88E9
91 #define GL_DYNAMIC_COPY 0x88EA
92 #define GL_SAMPLES_PASSED 0x8914
95 #if !defined(GL_ARB_texture_env_combine) || !defined(GL_ARB_texture_env_add)
96 #define GL_ARB_texture_env_combine 1
97 #define GL_ARB_texture_env_add 1
98 #define GL_COMBINE_ARB 0x8570
99 #define GL_COMBINE_RGB_ARB 0x8571
100 #define GL_COMBINE_ALPHA_ARB 0x8572
101 #define GL_SOURCE0_RGB_ARB 0x8580
102 #define GL_SOURCE1_RGB_ARB 0x8581
103 #define GL_SOURCE2_RGB_ARB 0x8582
104 #define GL_SOURCE0_ALPHA_ARB 0x8588
105 #define GL_SOURCE1_ALPHA_ARB 0x8589
106 #define GL_SOURCE2_ALPHA_ARB 0x858A
107 #define GL_OPERAND0_RGB_ARB 0x8590
108 #define GL_OPERAND1_RGB_ARB 0x8591
109 #define GL_OPERAND2_RGB_ARB 0x8592
110 #define GL_OPERAND0_ALPHA_ARB 0x8598
111 #define GL_OPERAND1_ALPHA_ARB 0x8599
112 #define GL_OPERAND2_ALPHA_ARB 0x859A
113 #define GL_RGB_SCALE_ARB 0x8573
114 #define GL_ADD_SIGNED_ARB 0x8574
115 #define GL_INTERPOLATE_ARB 0x8575
116 #define GL_SUBTRACT_ARB 0x84E7
117 #define GL_CONSTANT_ARB 0x8576
118 #define GL_PRIMARY_COLOR_ARB 0x8577
119 #define GL_PREVIOUS_ARB 0x8578
122 #ifndef GL_ARB_point_sprite
123 #define GL_ARB_point_sprite 1
124 #define GL_POINT_SPRITE_ARB 0x8861
125 #define GL_COORD_REPLACE_ARB 0x8862
128 #ifndef GL_ARB_vertex_buffer_object
129 #define GL_ARB_vertex_buffer_object 1
160 #ifndef GL_EXT_compiled_vertex_array
161 #define GL_EXT_compiled_vertex_array 1
164 typedef void (* glUnlockArraysEXTProcPtr) (
void);
171 #ifndef GL_EXT_framebuffer_object
172 #define GL_EXT_framebuffer_object 1
173 #define GL_INVALID_FRAMEBUFFER_OPERATION_EXT 0x0506
174 #define GL_MAX_RENDERBUFFER_SIZE_EXT 0x84E8
175 #define GL_FRAMEBUFFER_BINDING_EXT 0x8CA6
176 #define GL_RENDERBUFFER_BINDING_EXT 0x8CA7
177 #define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT 0x8CD0
178 #define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT 0x8CD1
179 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT 0x8CD2
180 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT 0x8CD3
181 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT 0x8CD4
182 #define GL_FRAMEBUFFER_COMPLETE_EXT 0x8CD5
183 #define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT 0x8CD6
184 #define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT 0x8CD7
185 #define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT 0x8CD9
186 #define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT 0x8CDA
187 #define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT 0x8CDB
188 #define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT 0x8CDC
189 #define GL_FRAMEBUFFER_UNSUPPORTED_EXT 0x8CDD
190 #define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF
191 #define GL_COLOR_ATTACHMENT0_EXT 0x8CE0
192 #define GL_COLOR_ATTACHMENT1_EXT 0x8CE1
193 #define GL_COLOR_ATTACHMENT2_EXT 0x8CE2
194 #define GL_COLOR_ATTACHMENT3_EXT 0x8CE3
195 #define GL_COLOR_ATTACHMENT4_EXT 0x8CE4
196 #define GL_COLOR_ATTACHMENT5_EXT 0x8CE5
197 #define GL_COLOR_ATTACHMENT6_EXT 0x8CE6
198 #define GL_COLOR_ATTACHMENT7_EXT 0x8CE7
199 #define GL_COLOR_ATTACHMENT8_EXT 0x8CE8
200 #define GL_COLOR_ATTACHMENT9_EXT 0x8CE9
201 #define GL_COLOR_ATTACHMENT10_EXT 0x8CEA
202 #define GL_COLOR_ATTACHMENT11_EXT 0x8CEB
203 #define GL_COLOR_ATTACHMENT12_EXT 0x8CEC
204 #define GL_COLOR_ATTACHMENT13_EXT 0x8CED
205 #define GL_COLOR_ATTACHMENT14_EXT 0x8CEE
206 #define GL_COLOR_ATTACHMENT15_EXT 0x8CEF
207 #define GL_DEPTH_ATTACHMENT_EXT 0x8D00
208 #define GL_STENCIL_ATTACHMENT_EXT 0x8D20
209 #define GL_FRAMEBUFFER_EXT 0x8D40
210 #define GL_RENDERBUFFER_EXT 0x8D41
211 #define GL_RENDERBUFFER_WIDTH_EXT 0x8D42
212 #define GL_RENDERBUFFER_HEIGHT_EXT 0x8D43
213 #define GL_RENDERBUFFER_INTERNAL_FORMAT_EXT 0x8D44
214 #define GL_STENCIL_INDEX_EXT 0x8D45
215 #define GL_STENCIL_INDEX1_EXT 0x8D46
216 #define GL_STENCIL_INDEX4_EXT 0x8D47
217 #define GL_STENCIL_INDEX8_EXT 0x8D48
218 #define GL_STENCIL_INDEX16_EXT 0x8D49
219 #define GL_RENDERBUFFER_RED_SIZE_EXT 0x8D50
220 #define GL_RENDERBUFFER_GREEN_SIZE_EXT 0x8D51
221 #define GL_RENDERBUFFER_BLUE_SIZE_EXT 0x8D52
222 #define GL_RENDERBUFFER_ALPHA_SIZE_EXT 0x8D53
223 #define GL_RENDERBUFFER_DEPTH_SIZE_EXT 0x8D54
224 #define GL_RENDERBUFFER_STENCIL_SIZE_EXT 0x8D55
263 #endif // GL_EXT_framebuffer_object
265 #ifndef GL_ARB_shader_objects
266 #define GL_ARB_shader_objects 1
267 #define GL_PROGRAM_OBJECT_ARB 0x8B40
268 #define GL_SHADER_OBJECT_ARB 0x8B48
269 #define GL_OBJECT_TYPE_ARB 0x8B4E
270 #define GL_OBJECT_SUBTYPE_ARB 0x8B4F
271 #define GL_FLOAT_VEC2_ARB 0x8B50
272 #define GL_FLOAT_VEC3_ARB 0x8B51
273 #define GL_FLOAT_VEC4_ARB 0x8B52
274 #define GL_INT_VEC2_ARB 0x8B53
275 #define GL_INT_VEC3_ARB 0x8B54
276 #define GL_INT_VEC4_ARB 0x8B55
277 #define GL_BOOL_ARB 0x8B56
278 #define GL_BOOL_VEC2_ARB 0x8B57
279 #define GL_BOOL_VEC3_ARB 0x8B58
280 #define GL_BOOL_VEC4_ARB 0x8B59
281 #define GL_FLOAT_MAT2_ARB 0x8B5A
282 #define GL_FLOAT_MAT3_ARB 0x8B5B
283 #define GL_FLOAT_MAT4_ARB 0x8B5C
284 #define GL_SAMPLER_1D_ARB 0x8B5D
285 #define GL_SAMPLER_2D_ARB 0x8B5E
286 #define GL_SAMPLER_3D_ARB 0x8B5F
287 #define GL_SAMPLER_CUBE_ARB 0x8B60
288 #define GL_SAMPLER_1D_SHADOW_ARB 0x8B61
289 #define GL_SAMPLER_2D_SHADOW_ARB 0x8B62
290 #define GL_SAMPLER_2D_RECT_ARB 0x8B63
291 #define GL_SAMPLER_2D_RECT_SHADOW_ARB 0x8B64
292 #define GL_OBJECT_DELETE_STATUS_ARB 0x8B80
293 #define GL_OBJECT_COMPILE_STATUS_ARB 0x8B81
294 #define GL_OBJECT_LINK_STATUS_ARB 0x8B82
295 #define GL_OBJECT_VALIDATE_STATUS_ARB 0x8B83
296 #define GL_OBJECT_INFO_LOG_LENGTH_ARB 0x8B84
297 #define GL_OBJECT_ATTACHED_OBJECTS_ARB 0x8B85
298 #define GL_OBJECT_ACTIVE_UNIFORMS_ARB 0x8B86
299 #define GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB 0x8B87
300 #define GL_OBJECT_SHADER_SOURCE_LENGTH_ARB 0x8B88
315 typedef void (* glUseProgramObjectARBProcPtr) (
GLhandleARB programObj);
386 #endif // GL_ARB_shader_objects
388 #ifndef GL_ARB_vertex_shader
389 #define GL_ARB_vertex_shader 1
390 #define GL_VERTEX_SHADER_ARB 0x8B31
391 #define GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB 0x8B4A
392 #define GL_MAX_VARYING_FLOATS_ARB 0x8B4B
393 #define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C
394 #define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB 0x8B4D
395 #define GL_OBJECT_ACTIVE_ATTRIBUTES_ARB 0x8B89
396 #define GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB 0x8B8A
407 #endif // GL_ARB_vertex_shader
409 #ifndef GL_ARB_fragment_shader
410 #define GL_ARB_fragment_shader 1
411 #define GL_FRAGMENT_SHADER_ARB 0x8B30
412 #define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB 0x8B49
413 #define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB 0x8B8B
414 #endif // GL_ARB_fragment_shader
416 #ifndef GL_ARB_shading_language_100
417 #define GL_ARB_shading_language_100 1
418 #define GL_SHADING_LANGUAGE_VERSION_ARB 0x8B8C
419 #endif // GL_ARB_shading_language_100
422 #ifndef GL_SHADING_LANGUAGE_VERSION_ARB
423 #define GL_SHADING_LANGUAGE_VERSION_ARB 0x8B8C
427 #ifndef GL_ARB_vertex_program
428 #define GL_ARB_vertex_program 1
429 #define GL_COLOR_SUM_ARB 0x8458
430 #define GL_VERTEX_PROGRAM_ARB 0x8620
431 #define GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB 0x8622
432 #define GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB 0x8623
433 #define GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB 0x8624
434 #define GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB 0x8625
435 #define GL_CURRENT_VERTEX_ATTRIB_ARB 0x8626
436 #define GL_PROGRAM_LENGTH_ARB 0x8627
437 #define GL_PROGRAM_STRING_ARB 0x8628
438 #define GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB 0x862E
439 #define GL_MAX_PROGRAM_MATRICES_ARB 0x862F
440 #define GL_CURRENT_MATRIX_STACK_DEPTH_ARB 0x8640
441 #define GL_CURRENT_MATRIX_ARB 0x8641
442 #define GL_VERTEX_PROGRAM_POINT_SIZE_ARB 0x8642
443 #define GL_VERTEX_PROGRAM_TWO_SIDE_ARB 0x8643
444 #define GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB 0x8645
445 #define GL_PROGRAM_ERROR_POSITION_ARB 0x864B
446 #define GL_PROGRAM_BINDING_ARB 0x8677
447 #define GL_MAX_VERTEX_ATTRIBS_ARB 0x8869
448 #define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB 0x886A
449 #define GL_PROGRAM_ERROR_STRING_ARB 0x8874
450 #define GL_PROGRAM_FORMAT_ASCII_ARB 0x8875
451 #define GL_PROGRAM_FORMAT_ARB 0x8876
452 #define GL_PROGRAM_INSTRUCTIONS_ARB 0x88A0
453 #define GL_MAX_PROGRAM_INSTRUCTIONS_ARB 0x88A1
454 #define GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A2
455 #define GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A3
456 #define GL_PROGRAM_TEMPORARIES_ARB 0x88A4
457 #define GL_MAX_PROGRAM_TEMPORARIES_ARB 0x88A5
458 #define GL_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A6
459 #define GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A7
460 #define GL_PROGRAM_PARAMETERS_ARB 0x88A8
461 #define GL_MAX_PROGRAM_PARAMETERS_ARB 0x88A9
462 #define GL_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AA
463 #define GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AB
464 #define GL_PROGRAM_ATTRIBS_ARB 0x88AC
465 #define GL_MAX_PROGRAM_ATTRIBS_ARB 0x88AD
466 #define GL_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AE
467 #define GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AF
468 #define GL_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B0
469 #define GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B1
470 #define GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B2
471 #define GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B3
472 #define GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB 0x88B4
473 #define GL_MAX_PROGRAM_ENV_PARAMETERS_ARB 0x88B5
474 #define GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB 0x88B6
475 #define GL_TRANSPOSE_CURRENT_MATRIX_ARB 0x88B7
476 #define GL_MATRIX0_ARB 0x88C0
477 #define GL_MATRIX1_ARB 0x88C1
478 #define GL_MATRIX2_ARB 0x88C2
479 #define GL_MATRIX3_ARB 0x88C3
480 #define GL_MATRIX4_ARB 0x88C4
481 #define GL_MATRIX5_ARB 0x88C5
482 #define GL_MATRIX6_ARB 0x88C6
483 #define GL_MATRIX7_ARB 0x88C7
484 #define GL_MATRIX8_ARB 0x88C8
485 #define GL_MATRIX9_ARB 0x88C9
486 #define GL_MATRIX10_ARB 0x88CA
487 #define GL_MATRIX11_ARB 0x88CB
488 #define GL_MATRIX12_ARB 0x88CC
489 #define GL_MATRIX13_ARB 0x88CD
490 #define GL_MATRIX14_ARB 0x88CE
491 #define GL_MATRIX15_ARB 0x88CF
492 #define GL_MATRIX16_ARB 0x88D0
493 #define GL_MATRIX17_ARB 0x88D1
494 #define GL_MATRIX18_ARB 0x88D2
495 #define GL_MATRIX19_ARB 0x88D3
496 #define GL_MATRIX20_ARB 0x88D4
497 #define GL_MATRIX21_ARB 0x88D5
498 #define GL_MATRIX22_ARB 0x88D6
499 #define GL_MATRIX23_ARB 0x88D7
500 #define GL_MATRIX24_ARB 0x88D8
501 #define GL_MATRIX25_ARB 0x88D9
502 #define GL_MATRIX26_ARB 0x88DA
503 #define GL_MATRIX27_ARB 0x88DB
504 #define GL_MATRIX28_ARB 0x88DC
505 #define GL_MATRIX29_ARB 0x88DD
506 #define GL_MATRIX30_ARB 0x88DE
507 #define GL_MATRIX31_ARB 0x88DF
636 #endif // GL_ARB_vertex_program
638 #ifndef GL_ARB_draw_elements_base_vertex
639 #define GL_ARB_draw_elements_base_vertex 1
651 #endif // GL_ARB_draw_elements_base_vertex
661 #define GL_CHECK_FOR_ERRORS(s) opengl_check_for_errors((s))
663 #define GL_CHECK_FOR_ERRORS(s)
GLint GLenum GLboolean GLsizei stride
GLsizei GLenum const GLvoid * indices
GLsizeiptrARB const GLvoid GLenum usage
const GLuint * renderbuffers
typedef GLboolean(APIENTRYP PFNGLISBUFFERARBPROC)(GLuint buffer)
GLenum GLenum GLuint GLint GLint zoffset
int opengl_check_for_errors(char *err_at=NULL)
GLint GLenum GLboolean normalized
GLenum GLenum GLuint texture
GLsizei GLenum const GLvoid GLint basevertex
GLubyte GLubyte GLubyte GLubyte w
const ubyte GL_zero_3ub[3]
GLfloat GLfloat GLfloat GLfloat v3
GLint GLenum GLboolean GLsizei const GLvoid * pointer
GLsizei GLsizei GLcharARB * infoLog
GLfloat GLfloat GLfloat v2
typedef GLint(APIENTRYP PFNGLGETUNIFORMLOCATIONARBPROC)(GLhandleARB programObj
GLsizei const GLcharARB ** string
GLsizei const GLcharARB const GLint * length
GLsizei const GLfloat * value
void gr_opengl_cleanup(int minimize=1)
GLsizei GLboolean transpose
GLenum GLenum renderbuffertarget
typedef void(APIENTRYP PFNGLBINDBUFFERARBPROC)(GLenum target
GLsizei GLsizei GLcharARB * source
GLuint GLsizei GLsizei GLint GLenum * type
GLvoid *APIENTRYP PFNGLMAPBUFFERARBPROC(GLenum target, GLenum access)
GLenum GLsizei GLsizei height
const GLuint * framebuffers
bool is_minimum_GLSL_version()
typedef GLenum(APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC)(GLenum target)
GLsizeiptrARB const GLvoid * data
GLdouble GLdouble GLdouble z
GLenum GLenum GLuint GLint level
GLsizei GLenum const GLvoid GLsizei primcount