Cafu Engine
OpenGLEx.hpp
1 /*
2 Cafu Engine, http://www.cafu.de/
3 Copyright (c) Carsten Fuchs and other contributors.
4 This project is licensed under the terms of the MIT license.
5 */
6 
7 /**********************************/
8 /*** OpenGL Extensions (Header) ***/
9 /**********************************/
10 
11 #ifndef CAFU_OPENGL_EX_HPP_INCLUDED
12 #define CAFU_OPENGL_EX_HPP_INCLUDED
13 
14 #if defined(_WIN32)
15  // #Including gl.h requires windows.h on Win32.
16  #define WIN32_LEAN_AND_MEAN
17  #include <windows.h>
18 #else
19  // On Linux (as on all all other platforms), we don't want to auto-include the systems <GL/glext.h> file.
20  #define GL_GLEXT_LEGACY
21 #endif
22 
23 #include <GL/gl.h>
24 #include "glext.h" // Use the local version of glext.h, not the system one. The latest version is found at http://oss.sgi.com/projects/ogl-sample/ABI/.
25 
26 
27 // This namespace is very important because it solves two difficult problems:
28 // 1) First, depending on the versions of the #included gl.h and glext.h files, some of the function pointer
29 // declarations may already be provided by those headers (especially newer versions e.g. for OpenGL 1.3
30 // come e.g. with multi-texturing functions predeclared), and thus clash with our private declarations.
31 // 2) Subtle linking problems that eventually are also results of clashes can occur under Linux,
32 // see http://groups.google.de/group/gnu.g++.help/browse_thread/thread/94674a10902646a5 for details.
33 namespace cf
34 {
35  // Availability of extensions.
36  extern bool GL_ARB_multitexture_AVAIL;
37  extern bool GL_ARB_texture_cube_map_AVAIL;
38  extern bool GL_ARB_texture_compression_AVAIL;
39  extern bool GL_ATI_Radeon8500Shaders_AVAIL;
40  extern bool GL_EXT_stencil_wrap_AVAIL;
41  extern bool GL_EXT_stencil_two_side_AVAIL;
42  extern bool GL_ARB_vertex_and_fragment_program_AVAIL;
43 
44  // Initialize extensions.
45  void Init_GL_ARB_multitexture();
46  void Init_GL_ARB_texture_cube_map();
47  void Init_GL_ARB_texture_compression();
48  void Init_ATI_Radeon8500Shaders();
49  void Init_GL_EXT_stencil_wrap();
50  void Init_GL_EXT_stencil_two_side();
51  void Init_GL_ARB_vertex_and_fragment_program();
52 
53 
54  // Pointers to extension functions.
55  extern PFNGLMULTITEXCOORD2DARBPROC glMultiTexCoord2dARB; // Extension "GL_ARB_multitexture".
56  extern PFNGLMULTITEXCOORD2FARBPROC glMultiTexCoord2fARB;
57  extern PFNGLMULTITEXCOORD2FVARBPROC glMultiTexCoord2fvARB;
58  extern PFNGLMULTITEXCOORD3FARBPROC glMultiTexCoord3fARB;
59  extern PFNGLMULTITEXCOORD3FVARBPROC glMultiTexCoord3fvARB;
60  extern PFNGLMULTITEXCOORD4FARBPROC glMultiTexCoord4fARB;
61  extern PFNGLMULTITEXCOORD4FVARBPROC glMultiTexCoord4fvARB;
62  extern PFNGLACTIVETEXTUREARBPROC glActiveTextureARB;
63  extern PFNGLCLIENTACTIVETEXTUREARBPROC glClientActiveTextureARB;
64 
65  extern PFNGLCOMPRESSEDTEXIMAGE3DARBPROC glCompressedTexImage3DARB; // Extension "GL_ARB_texture_compression".
66  extern PFNGLCOMPRESSEDTEXIMAGE2DARBPROC glCompressedTexImage2DARB;
67  extern PFNGLCOMPRESSEDTEXIMAGE1DARBPROC glCompressedTexImage1DARB;
68  extern PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC glCompressedTexSubImage3DARB;
69  extern PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC glCompressedTexSubImage2DARB;
70  extern PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC glCompressedTexSubImage1DARB;
71  extern PFNGLGETCOMPRESSEDTEXIMAGEARBPROC glGetCompressedTexImageARB;
72 
73  extern PFNGLGENFRAGMENTSHADERSATIPROC glGenFragmentShadersATI; // Extension "GL_ATI_fragment_shader".
74  extern PFNGLBINDFRAGMENTSHADERATIPROC glBindFragmentShaderATI;
75  extern PFNGLDELETEFRAGMENTSHADERATIPROC glDeleteFragmentShaderATI;
76  extern PFNGLBEGINFRAGMENTSHADERATIPROC glBeginFragmentShaderATI;
77  extern PFNGLENDFRAGMENTSHADERATIPROC glEndFragmentShaderATI;
78  extern PFNGLPASSTEXCOORDATIPROC glPassTexCoordATI;
79  extern PFNGLSAMPLEMAPATIPROC glSampleMapATI;
80  extern PFNGLCOLORFRAGMENTOP1ATIPROC glColorFragmentOp1ATI;
81  extern PFNGLCOLORFRAGMENTOP2ATIPROC glColorFragmentOp2ATI;
82  extern PFNGLCOLORFRAGMENTOP3ATIPROC glColorFragmentOp3ATI;
83  extern PFNGLALPHAFRAGMENTOP1ATIPROC glAlphaFragmentOp1ATI;
84  extern PFNGLALPHAFRAGMENTOP2ATIPROC glAlphaFragmentOp2ATI;
85  extern PFNGLALPHAFRAGMENTOP3ATIPROC glAlphaFragmentOp3ATI;
86  extern PFNGLSETFRAGMENTSHADERCONSTANTATIPROC glSetFragmentShaderConstantATI;
87 
88  extern PFNGLBEGINVERTEXSHADEREXTPROC glBeginVertexShaderEXT; // Extension "GL_EXT_vertex_shader".
89  extern PFNGLENDVERTEXSHADEREXTPROC glEndVertexShaderEXT;
90  extern PFNGLBINDVERTEXSHADEREXTPROC glBindVertexShaderEXT;
91  extern PFNGLGENVERTEXSHADERSEXTPROC glGenVertexShadersEXT;
92  extern PFNGLDELETEVERTEXSHADEREXTPROC glDeleteVertexShaderEXT;
93  extern PFNGLSHADEROP1EXTPROC glShaderOp1EXT;
94  extern PFNGLSHADEROP2EXTPROC glShaderOp2EXT;
95  extern PFNGLSHADEROP3EXTPROC glShaderOp3EXT;
96  extern PFNGLSWIZZLEEXTPROC glSwizzleEXT;
97  extern PFNGLWRITEMASKEXTPROC glWriteMaskEXT;
98  extern PFNGLINSERTCOMPONENTEXTPROC glInsertComponentEXT;
99  extern PFNGLEXTRACTCOMPONENTEXTPROC glExtractComponentEXT;
100  extern PFNGLGENSYMBOLSEXTPROC glGenSymbolsEXT;
101  extern PFNGLSETINVARIANTEXTPROC glSetInvariantEXT;
102  extern PFNGLSETLOCALCONSTANTEXTPROC glSetLocalConstantEXT;
103  extern PFNGLVARIANTBVEXTPROC glVariantbvEXT;
104  extern PFNGLVARIANTSVEXTPROC glVariantsvEXT;
105  extern PFNGLVARIANTIVEXTPROC glVariantivEXT;
106  extern PFNGLVARIANTFVEXTPROC glVariantfvEXT;
107  extern PFNGLVARIANTDVEXTPROC glVariantdvEXT;
108  extern PFNGLVARIANTUBVEXTPROC glVariantubvEXT;
109  extern PFNGLVARIANTUSVEXTPROC glVariantusvEXT;
110  extern PFNGLVARIANTUIVEXTPROC glVariantuivEXT;
111  extern PFNGLVARIANTPOINTEREXTPROC glVariantPointerEXT;
112  extern PFNGLENABLEVARIANTCLIENTSTATEEXTPROC glEnableVariantClientStateEXT;
113  extern PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC glDisableVariantClientStateEXT;
114  extern PFNGLBINDLIGHTPARAMETEREXTPROC glBindLightParameterEXT;
115  extern PFNGLBINDMATERIALPARAMETEREXTPROC glBindMaterialParameterEXT;
116  extern PFNGLBINDTEXGENPARAMETEREXTPROC glBindTexGenParameterEXT;
117  extern PFNGLBINDTEXTUREUNITPARAMETEREXTPROC glBindTextureUnitParameterEXT;
118  extern PFNGLBINDPARAMETEREXTPROC glBindParameterEXT;
119  extern PFNGLISVARIANTENABLEDEXTPROC glIsVariantEnabledEXT;
120  extern PFNGLGETVARIANTBOOLEANVEXTPROC glGetVariantBooleanvEXT;
121  extern PFNGLGETVARIANTINTEGERVEXTPROC glGetVariantIntegervEXT;
122  extern PFNGLGETVARIANTFLOATVEXTPROC glGetVariantFloatvEXT;
123  extern PFNGLGETVARIANTPOINTERVEXTPROC glGetVariantPointervEXT;
124  extern PFNGLGETINVARIANTBOOLEANVEXTPROC glGetInvariantBooleanvEXT;
125  extern PFNGLGETINVARIANTINTEGERVEXTPROC glGetInvariantIntegervEXT;
126  extern PFNGLGETINVARIANTFLOATVEXTPROC glGetInvariantFloatvEXT;
127  extern PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC glGetLocalConstantBooleanvEXT;
128  extern PFNGLGETLOCALCONSTANTINTEGERVEXTPROC glGetLocalConstantIntegervEXT;
129  extern PFNGLGETLOCALCONSTANTFLOATVEXTPROC glGetLocalConstantFloatvEXT;
130 
131  extern PFNGLACTIVESTENCILFACEEXTPROC glActiveStencilFaceEXT; // Extension "GL_EXT_stencil_two_side".
132 
133  extern PFNGLVERTEXATTRIB1DARBPROC glVertexAttrib1dARB; // Extensions "GL_ARB_vertex_program" and "GL_ARB_fragment_program".
134  extern PFNGLVERTEXATTRIB1DVARBPROC glVertexAttrib1dvARB;
135  extern PFNGLVERTEXATTRIB1FARBPROC glVertexAttrib1fARB;
136  extern PFNGLVERTEXATTRIB1FVARBPROC glVertexAttrib1fvARB;
137  extern PFNGLVERTEXATTRIB1SARBPROC glVertexAttrib1sARB;
138  extern PFNGLVERTEXATTRIB1SVARBPROC glVertexAttrib1svARB;
139  extern PFNGLVERTEXATTRIB2DARBPROC glVertexAttrib2dARB;
140  extern PFNGLVERTEXATTRIB2DVARBPROC glVertexAttrib2dvARB;
141  extern PFNGLVERTEXATTRIB2FARBPROC glVertexAttrib2fARB;
142  extern PFNGLVERTEXATTRIB2FVARBPROC glVertexAttrib2fvARB;
143  extern PFNGLVERTEXATTRIB2SARBPROC glVertexAttrib2sARB;
144  extern PFNGLVERTEXATTRIB2SVARBPROC glVertexAttrib2svARB;
145  extern PFNGLVERTEXATTRIB3DARBPROC glVertexAttrib3dARB;
146  extern PFNGLVERTEXATTRIB3DVARBPROC glVertexAttrib3dvARB;
147  extern PFNGLVERTEXATTRIB3FARBPROC glVertexAttrib3fARB;
148  extern PFNGLVERTEXATTRIB3FVARBPROC glVertexAttrib3fvARB;
149  extern PFNGLVERTEXATTRIB3SARBPROC glVertexAttrib3sARB;
150  extern PFNGLVERTEXATTRIB3SVARBPROC glVertexAttrib3svARB;
151  extern PFNGLVERTEXATTRIB4NBVARBPROC glVertexAttrib4NbvARB;
152  extern PFNGLVERTEXATTRIB4NIVARBPROC glVertexAttrib4NivARB;
153  extern PFNGLVERTEXATTRIB4NSVARBPROC glVertexAttrib4NsvARB;
154  extern PFNGLVERTEXATTRIB4NUBARBPROC glVertexAttrib4NubARB;
155  extern PFNGLVERTEXATTRIB4NUBVARBPROC glVertexAttrib4NubvARB;
156  extern PFNGLVERTEXATTRIB4NUIVARBPROC glVertexAttrib4NuivARB;
157  extern PFNGLVERTEXATTRIB4NUSVARBPROC glVertexAttrib4NusvARB;
158  extern PFNGLVERTEXATTRIB4BVARBPROC glVertexAttrib4bvARB;
159  extern PFNGLVERTEXATTRIB4DARBPROC glVertexAttrib4dARB;
160  extern PFNGLVERTEXATTRIB4DVARBPROC glVertexAttrib4dvARB;
161  extern PFNGLVERTEXATTRIB4FARBPROC glVertexAttrib4fARB;
162  extern PFNGLVERTEXATTRIB4FVARBPROC glVertexAttrib4fvARB;
163  extern PFNGLVERTEXATTRIB4IVARBPROC glVertexAttrib4ivARB;
164  extern PFNGLVERTEXATTRIB4SARBPROC glVertexAttrib4sARB;
165  extern PFNGLVERTEXATTRIB4SVARBPROC glVertexAttrib4svARB;
166  extern PFNGLVERTEXATTRIB4UBVARBPROC glVertexAttrib4ubvARB;
167  extern PFNGLVERTEXATTRIB4UIVARBPROC glVertexAttrib4uivARB;
168  extern PFNGLVERTEXATTRIB4USVARBPROC glVertexAttrib4usvARB;
169  extern PFNGLVERTEXATTRIBPOINTERARBPROC glVertexAttribPointerARB;
170  extern PFNGLENABLEVERTEXATTRIBARRAYARBPROC glEnableVertexAttribArrayARB;
171  extern PFNGLDISABLEVERTEXATTRIBARRAYARBPROC glDisableVertexAttribArrayARB;
172  extern PFNGLPROGRAMSTRINGARBPROC glProgramStringARB;
173  extern PFNGLBINDPROGRAMARBPROC glBindProgramARB;
174  extern PFNGLDELETEPROGRAMSARBPROC glDeleteProgramsARB;
175  extern PFNGLGENPROGRAMSARBPROC glGenProgramsARB;
176  extern PFNGLPROGRAMENVPARAMETER4DARBPROC glProgramEnvParameter4dARB;
177  extern PFNGLPROGRAMENVPARAMETER4DVARBPROC glProgramEnvParameter4dvARB;
178  extern PFNGLPROGRAMENVPARAMETER4FARBPROC glProgramEnvParameter4fARB;
179  extern PFNGLPROGRAMENVPARAMETER4FVARBPROC glProgramEnvParameter4fvARB;
180  extern PFNGLPROGRAMLOCALPARAMETER4DARBPROC glProgramLocalParameter4dARB;
181  extern PFNGLPROGRAMLOCALPARAMETER4DVARBPROC glProgramLocalParameter4dvARB;
182  extern PFNGLPROGRAMLOCALPARAMETER4FARBPROC glProgramLocalParameter4fARB;
183  extern PFNGLPROGRAMLOCALPARAMETER4FVARBPROC glProgramLocalParameter4fvARB;
184  extern PFNGLGETPROGRAMENVPARAMETERDVARBPROC glGetProgramEnvParameterdvARB;
185  extern PFNGLGETPROGRAMENVPARAMETERFVARBPROC glGetProgramEnvParameterfvARB;
186  extern PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC glGetProgramLocalParameterdvARB;
187  extern PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC glGetProgramLocalParameterfvARB;
188  extern PFNGLGETPROGRAMIVARBPROC glGetProgramivARB;
189  extern PFNGLGETPROGRAMSTRINGARBPROC glGetProgramStringARB;
190  extern PFNGLGETVERTEXATTRIBDVARBPROC glGetVertexAttribdvARB;
191  extern PFNGLGETVERTEXATTRIBFVARBPROC glGetVertexAttribfvARB;
192  extern PFNGLGETVERTEXATTRIBIVARBPROC glGetVertexAttribivARB;
193  extern PFNGLGETVERTEXATTRIBPOINTERVARBPROC glGetVertexAttribPointervARB;
194  extern PFNGLISPROGRAMARBPROC glIsProgramARB;
195 }
196 
197 #endif