33 #if !defined (_WIN32) && !defined (__CYGWIN__)
50 #endif //tells VCC not to generate min/max macros
53 #define GL_GLEXT_PROTOTYPES 1
54 #if defined (__APPLE__) || defined (MACOSX)
55 #include <OpenGL/gl.h>
56 #include <OpenGL/glext.h>
61 #ifdef GL_EXT_compiled_vertex_array
62 # ifndef PFNGLLOCKARRAYSEXTPROC
63 # undef GL_EXT_compiled_vertex_array
70 #if !defined (__APPLE__) && !defined (MACOSX) && !defined (WIN32) && !defined (__HAIKU__)
71 # define GLX_GLXEXT_PROTOTYPES 1
72 # define GLX_GLXEXT_LEGACY 1
74 # include <GL/glext.h>
80 #define WINDOW_TITLE "Vega Strike " VERSION
82 #if defined (CG_SUPPORT)
86 #if !defined (__APPLE__)
147 #define GET_GL_PROC wglGetProcAddress
149 #if defined(__HAIKU__)
151 #define GET_GL_PROC glutGetProcAddress
154 #define GET_GL_PROC glXGetProcAddressARB
158 #if defined (CG_SUPPORT)
159 CG_Cloak *cloak_cg =
new CG_Cloak();
165 static const GLubyte *extensions = NULL;
166 const GLubyte *
start;
167 GLubyte *where, *terminator;
170 where = (GLubyte*) strchr( extension,
' ' );
171 if (where || *extension ==
'\0')
174 extensions = glGetString( GL_EXTENSIONS );
185 where = (GLubyte*) strstr( (
const char*)
start, extension );
188 terminator = where+strlen( extension );
189 if (where == start || *(where-1) ==
' ')
190 if (*terminator ==
' ' || *terminator ==
'\0')
199 static const GLubyte *_glvendor = NULL;
201 if (_glvendor == NULL) {
202 _glvendor = glGetString( GL_VENDOR );
203 if (_glvendor != NULL)
207 if (_glvendor != NULL) {
211 static const std::string glvendor =
strtolower(std::string((
const char*)_glvendor));
212 static const std::string::size_type glvendor_sz = glvendor.length();
214 std::string::size_type svendor_sz = svendor.length();
215 std::string::size_type pos = glvendor.find(svendor);
217 if (pos == std::string::npos)
220 if ((pos > 0) && isalnum(glvendor[pos-1]))
223 if ((pos+svendor_sz) < glvendor_sz && isalnum(glvendor[pos+svendor_sz]))
234 const unsigned char *extensions = glGetString( GL_EXTENSIONS );
238 #ifndef NO_COMPILEDVERTEXARRAY_SUPPORT
242 #ifndef __APPLE_PANTHER_GCC33_CLI__
243 #if defined (glLockArraysEXT) && defined (glUnlockArraysEXT)
255 GET_GL_PROC( (GET_GL_PTR_TYP)
"glUnlockArraysEXT" );
260 #ifndef __APPLE_PANTHER_GCC33_CLI__
271 GET_GL_PROC( (GET_GL_PTR_TYP)
"glMultiDrawArraysEXT" );
273 GET_GL_PROC( (GET_GL_PTR_TYP)
"glMultiDrawElementsEXT" );
291 #ifndef NO_VBO_SUPPORT
378 #ifdef GL_FOG_DISTANCE_MODE_NV
385 glFogi( GL_FOG_DISTANCE_MODE_NV, GL_EYE_PLANE_ABSOLUTE_NV );
388 glFogi( GL_FOG_DISTANCE_MODE_NV, GL_EYE_PLANE );
391 glFogi( GL_FOG_DISTANCE_MODE_NV, GL_EYE_RADIAL_NV );
397 #ifdef GL_FOG_DISTANCE_MODE_NV
416 glGetIntegerv( GL_MAX_TEXTURE_UNITS, &multitex );
452 GLboolean srgbCapable =
true;
486 GLint max_vertices=-1, max_indices=-1;
487 glGetIntegerv( GL_MAX_ELEMENTS_INDICES, &max_indices );
488 glGetIntegerv( GL_MAX_ELEMENTS_VERTICES, &max_vertices );
534 char vsname[12] =
"Vega Strike";
535 char vsicon[9] =
"vega.ico";
553 ) ?
"true" :
"false" ) );
559 GLint max_rect_dimension = 65535;
562 &max_rect_dimension);
573 ) ?
"false" :
"true" ) );
599 glClearColor( clearcol[0], clearcol[1], clearcol[2], clearcol[3] );
602 glShadeModel( GL_SMOOTH );
603 glEnable( GL_CULL_FACE );
604 glCullFace( GL_BACK );
605 glShadeModel( GL_SMOOTH );
606 glEnable( GL_DEPTH_TEST );
607 glDepthFunc( GL_LESS );
609 glPolygonMode( GL_FRONT_AND_BACK, GL_LINE );
611 glShadeModel( GL_FLAT );
612 glEnable( GL_ALPHA_TEST );
613 glAlphaFunc( GL_GREATER, 0.0 );
619 glEnable( GL_TEXTURE_2D );
620 glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
621 glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
624 glEnable( GL_SHARED_TEXTURE_PALETTE_EXT );
633 glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT );
634 glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT );
635 glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE );
637 for (
int i = 1;
i < 4; ++
i) {
639 glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
640 glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
641 glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT );
642 glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT );
644 glPixelStorei( GL_UNPACK_SKIP_ROWS, 0 );
645 glPixelStorei( GL_UNPACK_SKIP_PIXELS, 0 );
646 glPixelStorei( GL_UNPACK_ALIGNMENT, 1 );
647 glPixelStorei( GL_UNPACK_SWAP_BYTES, 0 );
654 const float tempo[4] = {1, 0, 0, 0};
663 glEnable( GL_BLEND );
664 glDisable( GL_ALPHA_TEST );
667 glColor3f( 0, 0, 0 );
668 glMatrixMode( GL_MODELVIEW );
670 glMatrixMode( GL_TEXTURE );
672 glMatrixMode( GL_PROJECTION );
675 glEnable( GL_LIGHTING );
677 glDisable( GL_NORMALIZE );
679 glDisable( GL_LINE_SMOOTH );
680 glDisable( GL_POINT_SMOOTH );
687 glClear( GL_COLOR_BUFFER_BIT );
689 glClear( GL_COLOR_BUFFER_BIT );
701 void idle_loop(
void )
710 void visible(
int vis )
712 glutIdleFunc( vis == GLUT_VISIBLE ? idle_loop : NULL );
722 glutVisibilityFunc( visible );
723 static bool are_we_looping =
false;
725 if (!are_we_looping) {
726 are_we_looping =
true;
739 static bool are_we_looping =
false;
741 if (!are_we_looping) {
742 are_we_looping =
true;