////////////////////////////////////////////////////////////////////////////////
//    Scorched3D (c) 2000-2011, 2026
//
//    This file is part of Scorched3D.
//
//    Scorched3D is free software; you can redistribute it and/or modify
//    it under the terms of the GNU General Public License as published by
//    the Free Software Foundation; either version 2 of the License, or
//    (at your option) any later version.
//
//    Scorched3D is distributed in the hope that it will be useful,
//    but WITHOUT ANY WARRANTY; without even the implied warranty of
//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//    GNU General Public License for more details.
//
//    You should have received a copy of the GNU General Public License along
//    with this program; if not, write to the Free Software Foundation, Inc.,
//    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
////////////////////////////////////////////////////////////////////////////////

#ifndef __INCLUDE_GLMissingExt_hpp_INCLUDE__
#define __INCLUDE_GLMissingExt_hpp_INCLUDE__

// Some newer official GL extensions that may not have made it into the SDL
// implementation yet

#ifndef GL_COMBINE_ARB
#define GL_COMBINE_ARB 0x8570
#endif

#ifndef GL_RGB_SCALE_ARB
#define GL_RGB_SCALE_ARB 0x8573
#endif

#ifndef GL_NV_texture_rectangle
#define GL_TEXTURE_RECTANGLE_NV          0x84F5
#define GL_TEXTURE_BINDING_RECTANGLE_NV  0x84F6
#define GL_PROXY_TEXTURE_RECTANGLE_NV    0x84F7
#define GL_MAX_RECTANGLE_TEXTURE_SIZE_NV 0x84F8
#endif

#ifndef GL_ARB_depth_texture
#define GL_DEPTH_COMPONENT16_ARB  0x81A5
#define GL_DEPTH_COMPONENT24_ARB  0x81A6
#define GL_DEPTH_COMPONENT32_ARB  0x81A7
#define GL_TEXTURE_DEPTH_SIZE_ARB 0x884A
#define GL_DEPTH_TEXTURE_MODE_ARB 0x884B
#endif

#ifndef GL_ARB_shadow
#define GL_TEXTURE_COMPARE_MODE_ARB 0x884C
#define GL_TEXTURE_COMPARE_FUNC_ARB 0x884D
#define GL_COMPARE_R_TO_TEXTURE_ARB 0x884E
#endif

#ifndef GL_EXT_framebuffer_object
#define GL_INVALID_FRAMEBUFFER_OPERATION_EXT                0x0506
#define GL_MAX_RENDERBUFFER_SIZE_EXT                        0x84E8
#define GL_FRAMEBUFFER_BINDING_EXT                          0x8CA6
#define GL_RENDERBUFFER_BINDING_EXT                         0x8CA7
#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT           0x8CD0
#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT           0x8CD1
#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT         0x8CD2
#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT 0x8CD3
#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT    0x8CD4
#define GL_FRAMEBUFFER_COMPLETE_EXT                         0x8CD5
#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT            0x8CD6
#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT    0x8CD7
#define GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT  0x8CD8
#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT            0x8CD9
#define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT               0x8CDA
#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT           0x8CDB
#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT           0x8CDC
#define GL_FRAMEBUFFER_UNSUPPORTED_EXT                      0x8CDD
#define GL_MAX_COLOR_ATTACHMENTS_EXT                        0x8CDF
#define GL_COLOR_ATTACHMENT0_EXT                            0x8CE0
#define GL_COLOR_ATTACHMENT1_EXT                            0x8CE1
#define GL_COLOR_ATTACHMENT2_EXT                            0x8CE2
#define GL_COLOR_ATTACHMENT3_EXT                            0x8CE3
#define GL_COLOR_ATTACHMENT4_EXT                            0x8CE4
#define GL_COLOR_ATTACHMENT5_EXT                            0x8CE5
#define GL_COLOR_ATTACHMENT6_EXT                            0x8CE6
#define GL_COLOR_ATTACHMENT7_EXT                            0x8CE7
#define GL_COLOR_ATTACHMENT8_EXT                            0x8CE8
#define GL_COLOR_ATTACHMENT9_EXT                            0x8CE9
#define GL_COLOR_ATTACHMENT10_EXT                           0x8CEA
#define GL_COLOR_ATTACHMENT11_EXT                           0x8CEB
#define GL_COLOR_ATTACHMENT12_EXT                           0x8CEC
#define GL_COLOR_ATTACHMENT13_EXT                           0x8CED
#define GL_COLOR_ATTACHMENT14_EXT                           0x8CEE
#define GL_COLOR_ATTACHMENT15_EXT                           0x8CEF
#define GL_DEPTH_ATTACHMENT_EXT                             0x8D00
#define GL_STENCIL_ATTACHMENT_EXT                           0x8D20
#define GL_FRAMEBUFFER_EXT                                  0x8D40
#define GL_RENDERBUFFER_EXT                                 0x8D41
#define GL_RENDERBUFFER_WIDTH_EXT                           0x8D42
#define GL_RENDERBUFFER_HEIGHT_EXT                          0x8D43
#define GL_RENDERBUFFER_INTERNAL_FORMAT_EXT                 0x8D44
#define GL_STENCIL_INDEX_EXT                                0x8D45
#define GL_STENCIL_INDEX1_EXT                               0x8D46
#define GL_STENCIL_INDEX4_EXT                               0x8D47
#define GL_STENCIL_INDEX8_EXT                               0x8D48
#define GL_STENCIL_INDEX16_EXT                              0x8D49
#define GL_RENDERBUFFER_RED_SIZE_EXT                        0x8D50
#define GL_RENDERBUFFER_GREEN_SIZE_EXT                      0x8D51
#define GL_RENDERBUFFER_BLUE_SIZE_EXT                       0x8D52
#define GL_RENDERBUFFER_ALPHA_SIZE_EXT                      0x8D53
#define GL_RENDERBUFFER_DEPTH_SIZE_EXT                      0x8D54
#define GL_RENDERBUFFER_STENCIL_SIZE_EXT                    0x8D55
#endif

#ifndef GL_ARRAY_BUFFER_ARB
#define GL_ARRAY_BUFFER_ARB 0x8892
#define GL_STATIC_DRAW_ARB  0x88E4
#define GL_DYNAMIC_DRAW_ARB 0x88E8
#define GL_WRITE_ONLY_ARB   0x88B9
#endif

#ifndef GL_EXT_framebuffer_object
#define GL_EXT_framebuffer_object 1
typedef GLboolean( APIENTRY* PFNGLISRENDERBUFFEREXTPROC )( GLuint renderbuffer );
typedef void( APIENTRY* PFNGLBINDRENDERBUFFEREXTPROC )( GLenum target, GLuint renderbuffer );
typedef void( APIENTRY* PFNGLDELETERENDERBUFFERSEXTPROC )( GLsizei n, const GLuint* renderbuffers );
typedef void( APIENTRY* PFNGLGENRENDERBUFFERSEXTPROC )( GLsizei n, GLuint* renderbuffers );
typedef void( APIENTRY* PFNGLRENDERBUFFERSTORAGEEXTPROC )(
	GLenum  target,
	GLenum  internalformat,
	GLsizei width,
	GLsizei height
);
typedef void( APIENTRY* PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC )( GLenum target, GLenum pname, GLint* params );
typedef GLboolean( APIENTRY* PFNGLISFRAMEBUFFEREXTPROC )( GLuint framebuffer );
typedef void( APIENTRY* PFNGLBINDFRAMEBUFFEREXTPROC )( GLenum target, GLuint framebuffer );
typedef void( APIENTRY* PFNGLDELETEFRAMEBUFFERSEXTPROC )( GLsizei n, const GLuint* framebuffers );
typedef void( APIENTRY* PFNGLGENFRAMEBUFFERSEXTPROC )( GLsizei n, GLuint* framebuffers );
typedef GLenum( APIENTRY* PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC )( GLenum target );
typedef void( APIENTRY* PFNGLFRAMEBUFFERTEXTURE1DEXTPROC )(
	GLenum target,
	GLenum attachment,
	GLenum textarget,
	GLuint texture,
	GLint  level
);
typedef void( APIENTRY* PFNGLFRAMEBUFFERTEXTURE2DEXTPROC )(
	GLenum target,
	GLenum attachment,
	GLenum textarget,
	GLuint texture,
	GLint  level
);
typedef void( APIENTRY* PFNGLFRAMEBUFFERTEXTURE3DEXTPROC )(
	GLenum target,
	GLenum attachment,
	GLenum textarget,
	GLuint texture,
	GLint  level,
	GLint  zoffset
);
typedef void( APIENTRY* PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC )(
	GLenum target,
	GLenum attachment,
	GLenum renderbuffertarget,
	GLuint renderbuffer
);
typedef void( APIENTRY* PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC )(
	GLenum target,
	GLenum attachment,
	GLenum pname,
	GLint* params
);
typedef void( APIENTRY* PFNGLGENERATEMIPMAPEXTPROC )( GLenum target );
#endif

#ifndef GL_ARB_multitexture
#define GL_ARB_multitexture 1
typedef void( APIENTRY* PFNGLACTIVETEXTUREARBPROC )( GLenum texture );
typedef void( APIENTRY* PFNGLCLIENTACTIVETEXTUREARBPROC )( GLenum texture );
typedef void( APIENTRY* PFNGLMULTITEXCOORD1DARBPROC )( GLenum target, GLdouble s );
typedef void( APIENTRY* PFNGLMULTITEXCOORD1DVARBPROC )( GLenum target, const GLdouble* v );
typedef void( APIENTRY* PFNGLMULTITEXCOORD1FARBPROC )( GLenum target, GLfloat s );
typedef void( APIENTRY* PFNGLMULTITEXCOORD1FVARBPROC )( GLenum target, const GLfloat* v );
typedef void( APIENTRY* PFNGLMULTITEXCOORD1IARBPROC )( GLenum target, GLint s );
typedef void( APIENTRY* PFNGLMULTITEXCOORD1IVARBPROC )( GLenum target, const GLint* v );
typedef void( APIENTRY* PFNGLMULTITEXCOORD1SARBPROC )( GLenum target, GLshort s );
typedef void( APIENTRY* PFNGLMULTITEXCOORD1SVARBPROC )( GLenum target, const GLshort* v );
typedef void( APIENTRY* PFNGLMULTITEXCOORD2DARBPROC )( GLenum target, GLdouble s, GLdouble t );
typedef void( APIENTRY* PFNGLMULTITEXCOORD2DVARBPROC )( GLenum target, const GLdouble* v );
typedef void( APIENTRY* PFNGLMULTITEXCOORD2FARBPROC )( GLenum target, GLfloat s, GLfloat t );
typedef void( APIENTRY* PFNGLMULTITEXCOORD2FVARBPROC )( GLenum target, const GLfloat* v );
typedef void( APIENTRY* PFNGLMULTITEXCOORD2IARBPROC )( GLenum target, GLint s, GLint t );
typedef void( APIENTRY* PFNGLMULTITEXCOORD2IVARBPROC )( GLenum target, const GLint* v );
typedef void( APIENTRY* PFNGLMULTITEXCOORD2SARBPROC )( GLenum target, GLshort s, GLshort t );
typedef void( APIENTRY* PFNGLMULTITEXCOORD2SVARBPROC )( GLenum target, const GLshort* v );
typedef void( APIENTRY* PFNGLMULTITEXCOORD3DARBPROC )( GLenum target, GLdouble s, GLdouble t, GLdouble r );
typedef void( APIENTRY* PFNGLMULTITEXCOORD3DVARBPROC )( GLenum target, const GLdouble* v );
typedef void( APIENTRY* PFNGLMULTITEXCOORD3FARBPROC )( GLenum target, GLfloat s, GLfloat t, GLfloat r );
typedef void( APIENTRY* PFNGLMULTITEXCOORD3FVARBPROC )( GLenum target, const GLfloat* v );
typedef void( APIENTRY* PFNGLMULTITEXCOORD3IARBPROC )( GLenum target, GLint s, GLint t, GLint r );
typedef void( APIENTRY* PFNGLMULTITEXCOORD3IVARBPROC )( GLenum target, const GLint* v );
typedef void( APIENTRY* PFNGLMULTITEXCOORD3SARBPROC )( GLenum target, GLshort s, GLshort t, GLshort r );
typedef void( APIENTRY* PFNGLMULTITEXCOORD3SVARBPROC )( GLenum target, const GLshort* v );
typedef void( APIENTRY* PFNGLMULTITEXCOORD4DARBPROC )( GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q );
typedef void( APIENTRY* PFNGLMULTITEXCOORD4DVARBPROC )( GLenum target, const GLdouble* v );
typedef void( APIENTRY* PFNGLMULTITEXCOORD4FARBPROC )( GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q );
typedef void( APIENTRY* PFNGLMULTITEXCOORD4FVARBPROC )( GLenum target, const GLfloat* v );
typedef void( APIENTRY* PFNGLMULTITEXCOORD4IARBPROC )( GLenum target, GLint s, GLint t, GLint r, GLint q );
typedef void( APIENTRY* PFNGLMULTITEXCOORD4IVARBPROC )( GLenum target, const GLint* v );
typedef void( APIENTRY* PFNGLMULTITEXCOORD4SARBPROC )( GLenum target, GLshort s, GLshort t, GLshort r, GLshort q );
typedef void( APIENTRY* PFNGLMULTITEXCOORD4SVARBPROC )( GLenum target, const GLshort* v );
#endif

#ifndef GL_ARB_vertex_buffer_object
#define GL_ARB_vertex_buffer_object 1
typedef void( APIENTRY* PFNGLBINDBUFFERARBPROC )( GLenum target, GLuint buffer );
typedef void( APIENTRY* PFNGLDELETEBUFFERSARBPROC )( GLsizei n, const GLuint* buffers );
typedef void( APIENTRY* PFNGLGENBUFFERSARBPROC )( GLsizei n, GLuint* buffers );
typedef GLboolean( APIENTRY* PFNGLISBUFFERARBPROC )( GLuint buffer );
typedef void( APIENTRY* PFNGLBUFFERDATAARBPROC )( GLenum target, int size, const GLvoid* data, GLenum usage );
typedef void( APIENTRY* PFNGLBUFFERSUBDATAARBPROC )( GLenum target, int offset, int size, const GLvoid* data );
typedef void( APIENTRY* PFNGLGETBUFFERSUBDATAARBPROC )( GLenum target, int offset, int size, GLvoid* data );
typedef GLvoid*( APIENTRY* PFNGLMAPBUFFERARBPROC )( GLenum target, GLenum access );
typedef GLboolean( APIENTRY* PFNGLUNMAPBUFFERARBPROC )( GLenum target );
typedef void( APIENTRY* PFNGLGETBUFFERPARAMETERIVARBPROC )( GLenum target, GLenum pname, GLint* params );
typedef void( APIENTRY* PFNGLGETBUFFERPOINTERVARBPROC )( GLenum target, GLenum pname, GLvoid** params );
#endif

#endif  // __INCLUDE_GLMissingExt_hpp_INCLUDE__
