Vegastrike 0.5.1 rc1  1.0
Original sources for Vegastrike Evolved
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
gl_globals.h
Go to the documentation of this file.
1 /*
2  * Vega Strike
3  * Copyright (C) 2001-2002 Daniel Horn & Alan Shieh
4  *
5  * http://vegastrike.sourceforge.net/
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version 2
10  * of the License, or (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20  */
21 #ifndef _GL_GLOBALS_H_
22 #define _GL_GLOBALS_H_
23 #include <queue>
24 const static bool GFX_BUFFER_MAP_UNMAP = false;
25 /* Hack for multitexture on Mac, here and in gl_init, ifdefined - griff */
26 //Moved this because defining GL_EXT_texture... doesn't work under Jaguar
27 #ifdef __APPLE_PANTHER_GCC33_CLI__
28  #define GL_EXT_texture_env_combine 1
29 #endif /* __APPLE_PANTHER_GCC33_CLI__ */
30 #undef __APPLE_PANTHER_GCC33_CLI__
31 #if defined (__GNUC__) && defined (__APPLE__)
32  #if (__GNUC__ == 3 && __GNUC_MINOR__ > 2) || (__GNUC__ > 3)
33  #define __APPLE_PANTHER_GCC33_CLI__
34  #endif
35 #endif
36 
37 #ifndef GFXSTAT
38 #define GFXSTAT
39 #ifdef STATS_QUEUE
40 #include <time.h>
41 
42 struct GFXStats
43 {
44  int drawnTris;
45  int drawnQuads;
46  int drawnPoints;
47  time_t ztime;
48  GFXStats()
49  {
50  drawnTris = drawnQuads = drawnPoints = 0;
51  time( &ztime );
52  }
53  GFXStats( int tri, int quad, int point )
54  {
55  drawnTris = tri;
56  drawnQuads = quad;
57  drawnPoints = point;
58  }
59  GFXStats&operator+=( const GFXStats &rval )
60  {
61  drawnTris += rval.drawnTris;
62  drawnQuads += rval.drawnQuads;
63  drawnPoints += rval.drawnPoints;
64  return *this;
65  }
66  int total()
67  {
68  return drawnTris*3+drawnQuads*4+drawnPoints;
69  }
70  int elapsedTime()
71  {
72  time_t t;
73  time( &t );
74  return (int) (t-ztime);
75  }
76 };
77 #endif
78 #endif
79 
80 #define MAX_NUM_LIGHTS 4
81 #define MAX_NUM_MATERIAL 4
82 #define TEXTURE_CUBE_MAP_ARB 0x8513
83 
84 //extern Matrix model;
85 //extern Matrix view;
86 #if defined (__CYGWIN__)
87 #define GL_EXT_color_subtable 1
88 #endif
89 
90 #ifndef _WIN32
91 //#define GL_GLEXT_PROTOTYPES
92 
93 #endif
94 #if defined (_WIN32) || defined (__CYGWIN__)
95 #ifndef NOMINMAX
96 #define NOMINMAX
97 #endif //tells VCC not to generate min/max macros
98 #include <windows.h>
99 #include <GL/gl.h>
100 #endif
101 #if defined (__APPLE__) || defined (MACOSX)
102  #include <GLUT/glut.h>
103 //#if defined( GL_INIT_CPP) || defined( GL_MISC_CPP) || defined( GL_STATE_CPP)
104 #if defined (GL_ARB_vertex_program) && defined (GL_ARB_fragment_program)
105 #define OSX_AT_LEAST_10_4
106 #else
107 #define OSX_LOWER_THAN_10_4
108 #endif
109 #define GL_GLEXT_PROTOTYPES
110 //#endif
111  #include <OpenGL/glext.h>
112 #else
113 #define __glext_h_
114  #include <GL/glut.h>
115 #include "gl_undefined_extensions.h"
116 #undef __glext_h_
117 
118  #include <GL/glext.h>
119 #endif
120 #ifdef _WIN32
121 #define GL_TEXTURE0_ARB 0x84C0
122 #define GL_TEXTURE1_ARB 0x84C1
123 #define GL_TEXTURE_CUBE_MAP_ARB 0x8513
124 #define GL_TEXTURE_BINDING_CUBE_MAP_ARB 0x8514
125 #define GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x8515
126 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x8516
127 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x8517
128 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x8518
129 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x8519
130 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x851A
131 #define GL_PROXY_TEXTURE_CUBE_MAP_ARB 0x851B
132 #define GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB 0x851C
133 #define GL_TEXTURE_CUBE_MAP_EXT 0x8513
134 #define GL_TEXTURE_BINDING_CUBE_MAP_EXT 0x8514
135 #define GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT 0x8515
136 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT 0x8516
137 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT 0x8517
138 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT 0x8518
139 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT 0x8519
140 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT 0x851A
141 #define GL_PROXY_TEXTURE_CUBE_MAP_EXT 0x851B
142 #define GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT 0x851C
143 #endif
144 
145 #if defined (__APPLE__)
146 #define glMultiDrawElements_p glMultiDrawElements
147 #define glMultiDrawArrays_p glMultiDrawArrays
148 #define glMultiTexCoord4fARB_p glMultiTexCoord4fARB
149 #define glMultiTexCoord2fARB_p glMultiTexCoord2fARB
150 #define glClientActiveTextureARB_p glClientActiveTextureARB
151 #define glActiveTextureARB_p glActiveTextureARB
152 #define glColorTable_p glColorTable
153 #define glCompressedTexImage2D_p glCompressedTexImage2D
154 #ifndef OSX_LOWER_THAN_10_4
155 #define glGetShaderiv_p glGetShaderiv
156 #define glGetProgramiv_p glGetProgramiv
157 #define glGetShaderInfoLog_p glGetShaderInfoLog
158 #define glGetProgramInfoLog_p glGetProgramInfoLog
159 #define glCreateShader_p glCreateShader
160 #define glShaderSource_p glShaderSource
161 #define glCompileShader_p glCompileShader
162 #define glCreateProgram_p glCreateProgram
163 #define glAttachShader_p glAttachShader
164 #define glLinkProgram_p glLinkProgram
165 #define glUseProgram_p glUseProgram
166 #define glGetUniformLocation_p glGetUniformLocation
167 #define glUniform1f_p glUniform1f
168 #define glUniform2f_p glUniform2f
169 #define glUniform3f_p glUniform3f
170 #define glUniform4f_p glUniform4f
171 #define glUniform1i_p glUniform1i
172 #define glUniform2i_p glUniform2i
173 #define glUniform3i_p glUniform3i
174 #define glUniform4i_p glUniform4i
175 #define glUniform1fv_p glUniform1fv
176 #define glUniform2fv_p glUniform2fv
177 #define glUniform3fv_p glUniform3fv
178 #define glUniform4fv_p glUniform4fv
179 #define glUniform1iv_p glUniform1iv
180 #define glUniform2iv_p glUniform2iv
181 #define glUniform3iv_p glUniform3iv
182 #define glUniform4iv_p glUniform4iv
183 
184 #define glDeleteShader_p glDeleteShader
185 #define glDeleteProgram_p glDeleteProgram
186 #else
187 #define glGetShaderiv_p( a, b, c )
188 #define glGetProgramiv_p( a, b, c )
189 #define glGetShaderInfoLog_p( a, b, c, d )
190 #define glGetProgramInfoLog_p( a, b, c, d )
191 #define glCreateShader_p( a ) 0
192 #define glShaderSource_p( a, b, c, d )
193 #define glCompileShader_p( a )
194 #define glCreateProgram_p() 0
195 #define glAttachShader_p( a, b )
196 #define glLinkProgram_p( a )
197 #define glUseProgram_p( a )
198 #define glGetUniformLocation_p( a, b ) 0
199 #define glUniform1f_p( a, b )
200 #define glUniform2f_p( a, b, c )
201 #define glUniform3f_p( a, b, c, d )
202 #define glUniform4f_p( a, b, c, d, e )
203 #define glUniform1i_p( a, b )
204 #define glUniform2i_p( a, b, c )
205 #define glUniform3i_p( a, b, c, d )
206 #define glUniform4i_p( a, b, c, d, e )
207 #define glUniform1fv_p( a, b, c )
208 #define glUniform2fv_p( a, b, c )
209 #define glUniform3fv_p( a, b, c )
210 #define glUniform4fv_p( a, b, c )
211 #define glUniform1iv_p( a, b, c )
212 #define glUniform2iv_p( a, b, c )
213 #define glUniform3iv_p( a, b, c )
214 #define glUniform4iv_p( a, b, c )
215 
216 #define glDeleteProgram_p glIsTexture
217 
218 #endif
219 #if !defined (glLockArraysEXT) || !defined (glUnlockArraysEXT)
220 #define NO_COMPILEDVERTEXARRAY_SUPPORT
221 #endif
222 
223 #ifndef NO_COMPILEDVERTEXARRAY_SUPPORT
224 #define glLockArraysEXT_p glLockArraysEXT
225 #define glUnlockArraysEXT_p glUnlockArraysEXT
226 #endif
227 
228 #if !defined (glDeleteBuffersARB) || !defined (glGenBuffersARB) || !defined (glBindBuffersARB) || !defined (glMapBufferARB) \
229  || !defined (glUnmapBufferARB)
230 #define NO_VBO_SUPPORT
231 #endif
232 
233 #ifndef NO_VBO_SUPPORT
234 #define glDeleteBuffersARB_p glDeleteBuffersARB
235 #define glGenBuffersARB_p glGenBuffersARB
236 #define glBindBufferARB_p glBindBufferARB
237 #define glBufferDataARB_p glBufferDataARB
238 #define glMapBufferARB_p glMapBufferARB
239 #define glUnmapBufferARB_p glUnmapBufferARB
240 #endif
241 
242 #else
243 extern PFNGLBINDBUFFERARBPROC glBindBufferARB_p;
244 extern PFNGLGENBUFFERSARBPROC glGenBuffersARB_p;
245 extern PFNGLDELETEBUFFERSARBPROC glDeleteBuffersARB_p;
246 extern PFNGLBUFFERDATAARBPROC glBufferDataARB_p;
247 extern PFNGLMAPBUFFERARBPROC glMapBufferARB_p;
248 extern PFNGLUNMAPBUFFERARBPROC glUnmapBufferARB_p;
249 extern PFNGLMULTITEXCOORD2FARBPROC glMultiTexCoord2fARB_p;
250 extern PFNGLMULTITEXCOORD4FARBPROC glMultiTexCoord4fARB_p;
251 extern PFNGLCLIENTACTIVETEXTUREARBPROC glClientActiveTextureARB_p;
252 extern PFNGLCLIENTACTIVETEXTUREARBPROC glActiveTextureARB_p;
253 extern PFNGLCOLORTABLEEXTPROC glColorTable_p;
254 extern PFNGLLOCKARRAYSEXTPROC glLockArraysEXT_p;
255 extern PFNGLMULTIDRAWARRAYSEXTPROC glMultiDrawArrays_p;
256 extern PFNGLMULTIDRAWELEMENTSEXTPROC glMultiDrawElements_p;
257 extern PFNGLUNLOCKARRAYSEXTPROC glUnlockArraysEXT_p;
258 extern PFNGLCOMPRESSEDTEXIMAGE2DPROC glCompressedTexImage2D_p;
259 extern PFNGLGETSHADERIVPROC glGetShaderiv_p;
260 extern PFNGLGETPROGRAMIVPROC glGetProgramiv_p;
261 extern PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog_p;
262 extern PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog_p;
263 extern PFNGLCREATESHADERPROC glCreateShader_p;
264 extern PFNGLSHADERSOURCEPROC glShaderSource_p;
265 extern PFNGLCOMPILESHADERPROC glCompileShader_p;
266 extern PFNGLCREATEPROGRAMPROC glCreateProgram_p;
267 extern PFNGLATTACHSHADERPROC glAttachShader_p;
268 extern PFNGLLINKPROGRAMPROC glLinkProgram_p;
269 extern PFNGLUSEPROGRAMPROC glUseProgram_p;
270 extern PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation_p;
271 extern PFNGLUNIFORM1FPROC glUniform1f_p;
272 extern PFNGLUNIFORM2FPROC glUniform2f_p;
273 extern PFNGLUNIFORM3FPROC glUniform3f_p;
274 extern PFNGLUNIFORM4FPROC glUniform4f_p;
275 
276 extern PFNGLUNIFORM1IPROC glUniform1i_p;
277 extern PFNGLUNIFORM2IPROC glUniform2i_p;
278 extern PFNGLUNIFORM3IPROC glUniform3i_p;
279 extern PFNGLUNIFORM4IPROC glUniform4i_p;
280 
281 extern PFNGLUNIFORM1FVPROC glUniform1fv_p;
282 extern PFNGLUNIFORM2FVPROC glUniform2fv_p;
283 extern PFNGLUNIFORM3FVPROC glUniform3fv_p;
284 extern PFNGLUNIFORM4FVPROC glUniform4fv_p;
285 
286 extern PFNGLUNIFORM1IVPROC glUniform1iv_p;
287 extern PFNGLUNIFORM2IVPROC glUniform2iv_p;
288 extern PFNGLUNIFORM3IVPROC glUniform3iv_p;
289 extern PFNGLUNIFORM4IVPROC glUniform4iv_p;
290 
291 extern PFNGLDELETESHADERPROC glDeleteShader_p;
292 extern PFNGLDELETEPROGRAMPROC glDeleteProgram_p;
293 
294 #endif /* __APPLE_PANTHER_GCC33_CLI__ */
295 
296 //extern int sharedcolortable;
297 #ifdef STATS_QUEUE
298 extern queue< GFXStats >statsqueue;
299 #endif
300 typedef struct
301 {
303  size_t Multitexture;
306  int mipmap; //0 = nearest 1 = linear 2 = mipmap
308  int cubemap;
310  char wireframe;
319  bool s3tc;
323  bool nv_fp2; // NV_fragment_program2 signals the presence of texture2DLod on plain 1.10 GLSL
326 } gl_options_t;
327 extern gl_options_t gl_options;
328 
329 // rendering stats
330 extern int gl_vertices_this_frame;
331 extern int gl_batches_this_frame;
332 
333 //Maximum number of things that can be returned in a pick operation
334 #define MAX_PICK 2048
335 #define GFX_SCALE 1./1024.
336 #endif
337 
338 // Not all platforms define GL_TEXTURE_CUBE_MAP_EXT and friends
339 // Some platforms define _ARB variants,
340 // Some plafrorms define suffixless variants
341 #ifndef GL_TEXTURE_CUBE_MAP_EXT
342  #ifdef GL_TEXTURE_CUBE_MAP
343  #define GL_TEXTURE_CUBE_MAP_EXT GL_TEXTURE_CUBE_MAP
344  #define GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT GL_TEXTURE_CUBE_MAP_POSITIVE_X
345  #define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT GL_TEXTURE_CUBE_MAP_NEGATIVE_X
346  #define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT GL_TEXTURE_CUBE_MAP_POSITIVE_Y
347  #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
348  #define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT GL_TEXTURE_CUBE_MAP_POSITIVE_Z
349  #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
350  #else
351  #ifdef GL_TEXTURE_CUBE_MAP_ARB
352  #define GL_TEXTURE_CUBE_MAP_EXT GL_TEXTURE_CUBE_MAP_ARB
353  #define GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB
354  #define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB
355  #define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB
356  #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB
357  #define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB
358  #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB
359  #endif
360  #endif
361 #endif
362 
363 #ifndef GL_TEXTURE_RECTANGLE_ARB
364  #define GL_TEXTURE_RECTANGLE_ARB 0x84F5
365  #define GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB 0x84F8
366 #endif
367 
368 
369 // Not all platforms define GL_FRAMEBUFFER_SRGB stuff
370 #ifndef GL_FRAMEBUFFER_SRGB_EXT
371  #define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9
372  #define GL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x8DBA
373 #endif
374