summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile6
-rw-r--r--src/main.c123
-rw-r--r--src/oglfunc.c308
-rw-r--r--src/oglfunc.h222
-rw-r--r--src/opengl.c449
5 files changed, 824 insertions, 284 deletions
diff --git a/Makefile b/Makefile
index 29818d1..575f9ae 100644
--- a/Makefile
+++ b/Makefile
@@ -4,7 +4,7 @@ NASM = nasm
#CFLAGS = -g -Wall -pipe
CFLAGS = -g -Wall -pipe -O2
-#CFLAGS = -DNDEBUG -Wall -pipe -O6 -ffast-math -fomit-frame-pointer -march=pentiumpro -mcpu=pentiumpro
+#CFLAGS = -DNDEBUG -Wall -pipe -O6 -ffast-math -fomit-frame-pointer -march=pentium -mcpu=pentiumpro
CFLAGS += -DLINUX
@@ -12,11 +12,11 @@ CFLAGS += -Dengine=1 -I. -Iinclude -Iwin95 -Iavp -Iavp/win95 -Iavp/support -Iavp
CFLAGS += $(shell sdl-config --cflags)
CXXFLAGS = $(CFLAGS)
-LDLIBS = $(shell sdl-config --libs) -lGL -lopenal
+LDLIBS = $(shell sdl-config --libs) -lopenal
AFLAGS = -g -w+macro-params -w+orphan-labels -w+number-overflow
-ROOT = main.c files.c winapi.c stubs.c version.c mathline.c opengl.c openal.c cdplayer.c menus.c net.c frustum.c kshape.c map.c maths.c md5.c mem3dc.c mem3dcpp.cpp module.c morph.c object.c shpanim.c sphere.c tables.c vdb.c
+ROOT = main.c files.c winapi.c stubs.c version.c mathline.c opengl.c oglfunc.c openal.c cdplayer.c menus.c net.c frustum.c kshape.c map.c maths.c md5.c mem3dc.c mem3dcpp.cpp module.c morph.c object.c shpanim.c sphere.c tables.c vdb.c
AVP = ai_sight.c avpview.c bh_agun.c bh_ais.c bh_alien.c bh_binsw.c bh_cable.c bh_corpse.c bh_deathvol.c bh_debri.c bh_dummy.c bh_fan.c bh_far.c bh_fhug.c bh_gener.c bh_ldoor.c bh_lift.c bh_light.c bh_lnksw.c bh_ltfx.c bh_marin.c bh_mission.c bh_near.c bh_pargen.c bh_plachier.c bh_plift.c bh_pred.c bh_queen.c bh_rubberduck.c bh_selfdest.c bh_snds.c bh_spcl.c bh_swdor.c bh_track.c bh_types.c bh_videoscreen.c bh_waypt.c bh_weap.c bh_xeno.c bonusabilities.c cconvars.cpp cdtrackselection.cpp cheatmodes.c comp_map.c comp_shp.c consolelog.cpp davehook.cpp deaths.c decal.c detaillevels.c dynamics.c dynblock.c equipmnt.c equiputl.cpp extents.c game.c game_statistics.c gamecmds.cpp gamevars.cpp hmodel.c hud.c inventry.c language.c lighting.c load_shp.c los.c maps.c mempool.c messagehistory.c missions.cpp movement.c paintball.c particle.c pfarlocs.c pheromon.c player.c pmove.c psnd.c psndproj.c pvisible.c savegame.c scream.cpp secstats.c sfx.c stratdef.c targeting.c track.c triggers.c weapons.c
SHAPES = cube.c
SUPPORT = consbind.cpp consbtch.cpp coordstr.cpp daemon.cpp indexfnt.cpp r2base.cpp r2pos666.cpp reflist.cpp refobj.cpp rentrntq.cpp scstring.cpp strtab.cpp strutil.c trig666.cpp wrapstr.cpp
diff --git a/src/main.c b/src/main.c
index 3a3ae71..cfd4d8d 100644
--- a/src/main.c
+++ b/src/main.c
@@ -6,10 +6,11 @@
#include <assert.h>
#include "SDL.h"
-#include <GL/gl.h>
-#include <GL/glext.h>
+#include "oglfunc.h"
+#ifndef _GNU_SOURCE
#define _GNU_SOURCE
+#endif
#include <getopt.h>
#include "fixer.h"
@@ -71,11 +72,8 @@ int WantSound = 1;
static int WantCDRom = 1;
static int WantJoystick = 1;
-#if 0 /* NVIDIA gl.h breaks this */
-#if GL_EXT_secondary_color
-PFNGLSECONDARYCOLORPOINTEREXTPROC pglSecondaryColorPointerEXT;
-#endif
-#endif
+static const char * opengl_library = "/usr/lib/libGL.so.1";
+static const char * opengl_library_tls = "/usr/lib/tls/libGL.so.1";
/* ** */
@@ -184,9 +182,9 @@ unsigned char *GetScreenShot24(int *width, int *height)
buf = (unsigned char *)malloc(surface->w * surface->h * 3);
if (surface->flags & SDL_OPENGL) {
- glPixelStorei(GL_PACK_ALIGNMENT, 1);
- glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
- glReadPixels(0, 0, surface->w, surface->h, GL_RGB, GL_UNSIGNED_BYTE, buf);
+ pglPixelStorei(GL_PACK_ALIGNMENT, 1);
+ pglPixelStorei(GL_UNPACK_ALIGNMENT, 1);
+ pglReadPixels(0, 0, surface->w, surface->h, GL_RGB, GL_UNSIGNED_BYTE, buf);
} else {
unsigned char *ptrd;
unsigned short int *ptrs;
@@ -451,6 +449,20 @@ int SetSoftVideoMode(int Width, int Height, int Depth)
SDL_GrabMode isgrab;
int flags;
+ load_ogl_functions(0);
+
+ /*
+ let sdl try loading the opengl library, to see if it is even available
+ this is definitely not enough, but it's a start...
+ */
+ if (!surface || !(surface->flags & SDL_OPENGL))
+ if (SDL_GL_LoadLibrary(opengl_library) < 0) {
+ if (!opengl_library_tls || SDL_GL_LoadLibrary(opengl_library_tls) < 0) {
+ fprintf(stderr, "unable to initialize opengl library: %s\n", SDL_GetError());
+ exit(EXIT_FAILURE);
+ }
+ }
+
ScanDrawMode = ScanDrawD3DHardwareRGB;
GotMouse = 1;
@@ -469,7 +481,6 @@ int SetSoftVideoMode(int Width, int Height, int Depth)
if ((surface = SDL_SetVideoMode(Width, Height, Depth, flags)) == NULL) {
fprintf(stderr, "(Software) SDL SetVideoMode failed: %s\n", SDL_GetError());
- /* SDL_Quit(); */
exit(EXIT_FAILURE);
}
@@ -509,6 +520,8 @@ int SetOGLVideoMode(int Width, int Height)
ScanDrawMode = ScanDrawD3DHardwareRGB;
GotMouse = 1;
+ load_ogl_functions(0);
+
flags = SDL_OPENGL;
if (surface != NULL) {
if (surface->flags & SDL_FULLSCREEN)
@@ -517,11 +530,20 @@ int SetOGLVideoMode(int Width, int Height)
SDL_FreeSurface(surface);
} else {
- if (WantFullscreen)
+ if (WantFullscreen) {
flags |= SDL_FULLSCREEN;
+ }
+
isgrab = SDL_GRAB_OFF;
}
+ if (SDL_GL_LoadLibrary(opengl_library) < 0) {
+ if (!opengl_library_tls || SDL_GL_LoadLibrary(opengl_library_tls) < 0) {
+ fprintf(stderr, "unable to initialize opengl library: %s\n", SDL_GetError());
+ exit(EXIT_FAILURE);
+ }
+ }
+
SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 5);
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 5);
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 5);
@@ -530,10 +552,11 @@ int SetOGLVideoMode(int Width, int Height)
if ((surface = SDL_SetVideoMode(Width, Height, 0, flags)) == NULL) {
fprintf(stderr, "(OpenGL) SDL SetVideoMode failed: %s\n", SDL_GetError());
- /* SDL_Quit(); */
exit(EXIT_FAILURE);
}
+ load_ogl_functions(1);
+
SDL_WM_SetCaption("Aliens vs Predator", "Aliens vs Predator");
/* this is for supporting keyboard input processing with little hassle */
@@ -547,30 +570,30 @@ int SetOGLVideoMode(int Width, int Height)
(SDL_WM_GrabInput(SDL_GRAB_QUERY) == SDL_GRAB_ON))
SDL_ShowCursor(0);
- glViewport(0, 0, Width, Height);
+ pglViewport(0, 0, Width, Height);
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
+ pglMatrixMode(GL_PROJECTION);
+ pglLoadIdentity();
+ pglMatrixMode(GL_MODELVIEW);
+ pglLoadIdentity();
- glEnable(GL_BLEND);
- glBlendFunc(GL_SRC_ALPHA, GL_ONE);
+ pglEnable(GL_BLEND);
+ pglBlendFunc(GL_SRC_ALPHA, GL_ONE);
- glEnable(GL_DEPTH_TEST);
- glDepthFunc(GL_LEQUAL);
- glDepthMask(GL_TRUE);
- glDepthRange(0.0, 1.0);
+ pglEnable(GL_DEPTH_TEST);
+ pglDepthFunc(GL_LEQUAL);
+ pglDepthMask(GL_TRUE);
+ pglDepthRange(0.0, 1.0);
- glEnable(GL_TEXTURE_2D);
+ pglEnable(GL_TEXTURE_2D);
- glPolygonMode(GL_FRONT, GL_FILL);
- glPolygonMode(GL_BACK, GL_FILL);
- glDisable(GL_CULL_FACE);
+ pglPolygonMode(GL_FRONT, GL_FILL);
+ pglPolygonMode(GL_BACK, GL_FILL);
+ pglDisable(GL_CULL_FACE);
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+ pglClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
+ pglHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
ScreenDescriptorBlock.SDB_Width = Width;
ScreenDescriptorBlock.SDB_Height = Height;
@@ -583,28 +606,9 @@ int SetOGLVideoMode(int Width, int Height)
ScreenDescriptorBlock.SDB_ClipUp = 0;
ScreenDescriptorBlock.SDB_ClipDown = Height;
- ext = (char *)glGetString(GL_EXTENSIONS);
-/*
- printf("OpenGL Extensions: %s\n", ext);
-*/
-#if 0 /* NVIDIA header problem */
-#if GL_EXT_secondary_color
- pglSecondaryColorPointerEXT = NULL;
+ ext = (char *) pglGetString(GL_EXTENSIONS);
- if (CheckToken(ext, "GL_EXT_secondary_color")) {
- printf("Found GL_EXT_secondary_color... ");
-
- pglSecondaryColorPointerEXT = SDL_GL_GetProcAddress("glSecondaryColorPointerEXT");
- if (pglSecondaryColorPointerEXT == NULL) {
- printf("but the driver lied...\n");
- } else {
- printf("and it's good!\n");
- }
- } else {
- printf("GL_EXT_secondary_color not found...\n");
- }
-#endif
-#endif
+ load_ogl_functions(1);
InitOpenGL();
@@ -622,9 +626,12 @@ int ExitWindowsSystem()
SDL_JoystickClose(joy);
}
- /* SDL_Quit(); */
- if (surface)
+ load_ogl_functions(0);
+
+ if (surface) {
SDL_FreeSurface(surface);
+ }
+
surface = NULL;
return 0;
@@ -1246,7 +1253,7 @@ void InitGameDirectories(char *argv0)
DeleteGameFile("dx_error.log");
}
-static struct option getopt_long_options[] = {
+static const struct option getopt_long_options[] = {
{ "help", 0, NULL, 'h' },
{ "version", 0, NULL, 'v' },
{ "fullscreen", 0, NULL, 'f' },
@@ -1255,6 +1262,7 @@ static struct option getopt_long_options[] = {
{ "nocdrom", 0, NULL, 'c' },
{ "nojoy", 0, NULL, 'j' },
{ "debug", 0, NULL, 'd' },
+{ "withgl", 1, NULL, 'g' },
/*
{ "loadrifs", 1, NULL, 'l' },
{ "server", 0, someval, 1 },
@@ -1273,6 +1281,7 @@ static const char *usage_string =
" [-s | --nosound] Do not access the soundcard\n"
" [-c | --nocdrom] Do not access the CD-ROM\n"
" [-j | --nojoy] Do not access the joystick\n"
+" [-g | --withgl] [x] Use [x] instead of /usr/lib/libGL.so.1 for OpenGL\n"
;
int main(int argc, char *argv[])
@@ -1280,7 +1289,7 @@ int main(int argc, char *argv[])
int c;
opterr = 0;
- while ((c = getopt_long(argc, argv, "hvfwscd", getopt_long_options, NULL)) != -1) {
+ while ((c = getopt_long(argc, argv, "hvfwscdg:", getopt_long_options, NULL)) != -1) {
switch(c) {
case 'h':
printf("%s", usage_string);
@@ -1308,6 +1317,10 @@ int main(int argc, char *argv[])
DebuggingCommandsActive = 1;
}
break;
+ case 'g':
+ opengl_library = optarg;
+ opengl_library_tls = NULL;
+ break;
default:
printf("%s", usage_string);
exit(EXIT_FAILURE);
diff --git a/src/oglfunc.c b/src/oglfunc.c
new file mode 100644
index 0000000..f2d4283
--- /dev/null
+++ b/src/oglfunc.c
@@ -0,0 +1,308 @@
+#include <stdlib.h>
+#include <string.h>
+
+#include "SDL.h"
+
+#include "oglfunc.h"
+
+PFNGLALPHAFUNCPROC pglAlphaFunc;
+PFNGLARRAYELEMENTPROC pglArrayElement;
+PFNGLBEGINPROC pglBegin;
+PFNGLBINDTEXTUREPROC pglBindTexture;
+PFNGLBLENDFUNCPROC pglBlendFunc;
+PFNGLCLEARPROC pglClear;
+PFNGLCLEARCOLORPROC pglClearColor;
+PFNGLCOLOR3FPROC pglColor3f;
+PFNGLCOLOR3FVPROC pglColor3fv;
+PFNGLCOLOR3UBPROC pglColor3ub;
+PFNGLCOLOR3UBVPROC pglColor3ubv;
+PFNGLCOLOR4FPROC pglColor4f;
+PFNGLCOLOR4FVPROC pglColor4fv;
+PFNGLCOLOR4UBPROC pglColor4ub;
+PFNGLCOLOR4UBVPROC pglColor4ubv;
+PFNGLCOLORPOINTERPROC pglColorPointer;
+PFNGLCULLFACEPROC pglCullFace;
+PFNGLDELETETEXTURESPROC pglDeleteTextures;
+PFNGLDEPTHFUNCPROC pglDepthFunc;
+PFNGLDEPTHMASKPROC pglDepthMask;
+PFNGLDEPTHRANGEPROC pglDepthRange;
+PFNGLDISABLEPROC pglDisable;
+PFNGLDISABLECLIENTSTATEPROC pglDisableClientState;
+PFNGLDRAWBUFFERPROC pglDrawBuffer;
+PFNGLDRAWELEMENTSPROC pglDrawElements;
+PFNGLDRAWPIXELSPROC pglDrawPixels;
+PFNGLDRAWRANGEELEMENTSPROC pglDrawRangeElements;
+PFNGLENABLEPROC pglEnable;
+PFNGLENABLECLIENTSTATEPROC pglEnableClientState;
+PFNGLENDPROC pglEnd;
+PFNGLFRONTFACEPROC pglFrontFace;
+PFNGLFRUSTUMPROC pglFrustum;
+PFNGLGENTEXTURESPROC pglGenTextures;
+PFNGLGETERRORPROC pglGetError;
+PFNGLGETFLOATVPROC pglGetFloatv;
+PFNGLGETINTEGERVPROC pglGetIntegerv;
+PFNGLGETSTRINGPROC pglGetString;
+PFNGLHINTPROC pglHint;
+PFNGLLOADIDENTITYPROC pglLoadIdentity;
+PFNGLLOADMATRIXFPROC pglLoadMatrixf;
+PFNGLMATRIXMODEPROC pglMatrixMode;
+PFNGLMULTMATRIXFPROC pglMultMatrixf;
+PFNGLNORMALPOINTERPROC pglNormalPointer;
+PFNGLORTHOPROC pglOrtho;
+PFNGLPIXELSTOREIPROC pglPixelStorei;
+PFNGLPIXELZOOMPROC pglPixelZoom;
+PFNGLPOLYGONMODEPROC pglPolygonMode;
+PFNGLPOLYGONOFFSETPROC pglPolygonOffset;
+PFNGLPOPATTRIBPROC pglPopAttrib;
+PFNGLPOPCLIENTATTRIBPROC pglPopClientAttrib;
+PFNGLPOPMATRIXPROC pglPopMatrix;
+PFNGLPUSHATTRIBPROC pglPushAttrib;
+PFNGLPUSHCLIENTATTRIBPROC pglPushClientAttrib;
+PFNGLPUSHMATRIXPROC pglPushMatrix;
+PFNGLRASTERPOS2IPROC pglRasterPos2i;
+PFNGLREADBUFFERPROC pglReadBuffer;
+PFNGLREADPIXELSPROC pglReadPixels;
+PFNGLROTATEFPROC pglRotatef;
+PFNGLSCALEFPROC pglScalef;
+PFNGLSHADEMODELPROC pglShadeModel;
+PFNGLTEXCOORD2FPROC pglTexCoord2f;
+PFNGLTEXCOORD2FVPROC pglTexCoord2fv;
+PFNGLTEXCOORD3FPROC pglTexCoord3f;
+PFNGLTEXCOORD3FVPROC pglTexCoord3fv;
+PFNGLTEXCOORD4FPROC pglTexCoord4f;
+PFNGLTEXCOORD4FVPROC pglTexCoord4fv;
+PFNGLTEXCOORDPOINTERPROC pglTexCoordPointer;
+PFNGLTEXENVFPROC pglTexEnvf;
+PFNGLTEXENVFVPROC pglTexEnvfv;
+PFNGLTEXENVIPROC pglTexEnvi;
+PFNGLTEXIMAGE2DPROC pglTexImage2D;
+PFNGLTEXPARAMETERFPROC pglTexParameterf;
+PFNGLTEXPARAMETERIPROC pglTexParameteri;
+PFNGLTEXSUBIMAGE2DPROC pglTexSubImage2D;
+PFNGLTRANSLATEFPROC pglTranslatef;
+PFNGLVERTEX2FPROC pglVertex2f;
+PFNGLVERTEX2FVPROC pglVertex2fv;
+PFNGLVERTEX3FPROC pglVertex3f;
+PFNGLVERTEX3FVPROC pglVertex3fv;
+PFNGLVERTEX4FPROC pglVertex4f;
+PFNGLVERTEX4FVPROC pglVertex4fv;
+PFNGLVERTEXPOINTERPROC pglVertexPointer;
+PFNGLVIEWPORTPROC pglViewport;
+
+// GL_EXT_paletted_texture
+PFNGLCOLORTABLEEXTPROC pglColorTableEXT;
+PFNGLGETCOLORTABLEPARAMETERIVEXTPROC pglGetColorTableParameterivEXT;
+
+// GL_EXT_secondary_color
+PFNGLSECONDARYCOLOR3FEXTPROC pglSecondaryColor3fEXT;
+PFNGLSECONDARYCOLOR3FVEXTPROC pglSecondaryColor3fvEXT;
+PFNGLSECONDARYCOLOR3UBEXTPROC pglSecondaryColor3ubEXT;
+PFNGLSECONDARYCOLOR3UBVEXTPROC pglSecondaryColor3ubvEXT;
+PFNGLSECONDARYCOLORPOINTEREXTPROC pglSecondaryColorPointerEXT;
+
+int ogl_have_paletted_texture;
+int ogl_have_secondary_color;
+
+int ogl_use_paletted_texture;
+int ogl_use_secondary_color;
+
+static void dummyfunc()
+{
+}
+
+#define LoadOGLProc(type, func) \
+{ \
+ if (!mode) p##func = (type) dummyfunc; else \
+ p##func = (type) SDL_GL_GetProcAddress(#func); \
+ if (p##func == NULL) { \
+ if (!ogl_missing_func) ogl_missing_func = #func; \
+ } \
+}
+
+static int check_token(const char *string, const char *token)
+{
+ const char *s = string;
+ int len = strlen(token);
+
+ while ((s = strstr(s, token)) != NULL) {
+ const char *next = s + len;
+
+ if ((s == string || *(s-1) == ' ') &&
+ (*next == 0 || *next == ' ')) {
+
+ return 1;
+ }
+
+ s = next;
+ }
+
+ return 0;
+}
+
+void load_ogl_functions(int mode)
+{
+ const char * ogl_missing_func;
+
+ ogl_missing_func = NULL;
+
+ LoadOGLProc(PFNGLALPHAFUNCPROC, glAlphaFunc);
+ LoadOGLProc(PFNGLARRAYELEMENTPROC, glArrayElement);
+ LoadOGLProc(PFNGLBEGINPROC, glBegin);
+ LoadOGLProc(PFNGLBINDTEXTUREPROC, glBindTexture);
+ LoadOGLProc(PFNGLBLENDFUNCPROC, glBlendFunc);
+ LoadOGLProc(PFNGLCLEARPROC, glClear);
+ LoadOGLProc(PFNGLCLEARCOLORPROC, glClearColor);
+ LoadOGLProc(PFNGLCOLOR3FPROC, glColor3f);
+ LoadOGLProc(PFNGLCOLOR3FVPROC, glColor3fv);
+ LoadOGLProc(PFNGLCOLOR3UBPROC, glColor3ub);
+ LoadOGLProc(PFNGLCOLOR3UBVPROC, glColor3ubv);
+ LoadOGLProc(PFNGLCOLOR4FPROC, glColor4f);
+ LoadOGLProc(PFNGLCOLOR4FVPROC, glColor4fv);
+ LoadOGLProc(PFNGLCOLOR4UBPROC, glColor4ub);
+ LoadOGLProc(PFNGLCOLOR4UBVPROC, glColor4ubv);
+ LoadOGLProc(PFNGLCOLORPOINTERPROC, glColorPointer);
+ LoadOGLProc(PFNGLCULLFACEPROC, glCullFace);
+ LoadOGLProc(PFNGLDELETETEXTURESPROC, glDeleteTextures);
+ LoadOGLProc(PFNGLDEPTHFUNCPROC, glDepthFunc);
+ LoadOGLProc(PFNGLDEPTHMASKPROC, glDepthMask);
+ LoadOGLProc(PFNGLDEPTHRANGEPROC, glDepthRange);
+ LoadOGLProc(PFNGLDISABLEPROC, glDisable);
+ LoadOGLProc(PFNGLDISABLECLIENTSTATEPROC, glDisableClientState);
+ LoadOGLProc(PFNGLDRAWBUFFERPROC, glDrawBuffer);
+ LoadOGLProc(PFNGLDRAWELEMENTSPROC, glDrawElements);
+ LoadOGLProc(PFNGLDRAWPIXELSPROC, glDrawPixels);
+ LoadOGLProc(PFNGLDRAWRANGEELEMENTSPROC, glDrawRangeElements);
+ LoadOGLProc(PFNGLENABLEPROC, glEnable);
+ LoadOGLProc(PFNGLENABLECLIENTSTATEPROC, glEnableClientState);
+ LoadOGLProc(PFNGLENDPROC, glEnd);
+ LoadOGLProc(PFNGLFRONTFACEPROC, glFrontFace);
+ LoadOGLProc(PFNGLFRUSTUMPROC, glFrustum);
+ LoadOGLProc(PFNGLGENTEXTURESPROC, glGenTextures);
+ LoadOGLProc(PFNGLGETERRORPROC, glGetError);
+ LoadOGLProc(PFNGLGETFLOATVPROC, glGetFloatv);
+ LoadOGLProc(PFNGLGETINTEGERVPROC, glGetIntegerv);
+ LoadOGLProc(PFNGLGETSTRINGPROC, glGetString);
+ LoadOGLProc(PFNGLHINTPROC, glHint);
+ LoadOGLProc(PFNGLLOADIDENTITYPROC, glLoadIdentity);
+ LoadOGLProc(PFNGLLOADMATRIXFPROC, glLoadMatrixf);
+ LoadOGLProc(PFNGLMATRIXMODEPROC, glMatrixMode);
+ LoadOGLProc(PFNGLMULTMATRIXFPROC, glMultMatrixf);
+ LoadOGLProc(PFNGLNORMALPOINTERPROC, glNormalPointer);
+ LoadOGLProc(PFNGLORTHOPROC, glOrtho);
+ LoadOGLProc(PFNGLPIXELSTOREIPROC, glPixelStorei);
+ LoadOGLProc(PFNGLPIXELZOOMPROC, glPixelZoom);
+ LoadOGLProc(PFNGLPOLYGONMODEPROC, glPolygonMode);
+ LoadOGLProc(PFNGLPOLYGONOFFSETPROC, glPolygonOffset);
+ LoadOGLProc(PFNGLPOPATTRIBPROC, glPopAttrib);
+ LoadOGLProc(PFNGLPOPCLIENTATTRIBPROC, glPopClientAttrib);
+ LoadOGLProc(PFNGLPOPMATRIXPROC, glPopMatrix);
+ LoadOGLProc(PFNGLPUSHATTRIBPROC, glPushAttrib);
+ LoadOGLProc(PFNGLPUSHCLIENTATTRIBPROC, glPushClientAttrib);
+ LoadOGLProc(PFNGLPUSHMATRIXPROC, glPushMatrix);
+ LoadOGLProc(PFNGLRASTERPOS2IPROC, glRasterPos2i);
+ LoadOGLProc(PFNGLREADBUFFERPROC, glReadBuffer);
+ LoadOGLProc(PFNGLREADPIXELSPROC, glReadPixels);
+ LoadOGLProc(PFNGLROTATEFPROC, glRotatef);
+ LoadOGLProc(PFNGLSCALEFPROC, glScalef);
+ LoadOGLProc(PFNGLSHADEMODELPROC, glShadeModel);
+ LoadOGLProc(PFNGLTEXCOORD2FPROC, glTexCoord2f);
+ LoadOGLProc(PFNGLTEXCOORD2FVPROC, glTexCoord2fv);
+ LoadOGLProc(PFNGLTEXCOORD3FPROC, glTexCoord3f);
+ LoadOGLProc(PFNGLTEXCOORD3FVPROC, glTexCoord3fv);
+ LoadOGLProc(PFNGLTEXCOORD4FPROC, glTexCoord4f);
+ LoadOGLProc(PFNGLTEXCOORD4FVPROC, glTexCoord4fv);
+ LoadOGLProc(PFNGLTEXCOORDPOINTERPROC, glTexCoordPointer);
+ LoadOGLProc(PFNGLTEXENVFPROC, glTexEnvf);
+ LoadOGLProc(PFNGLTEXENVFVPROC, glTexEnvfv);
+ LoadOGLProc(PFNGLTEXENVIPROC, glTexEnvi);
+ LoadOGLProc(PFNGLTEXIMAGE2DPROC, glTexImage2D);
+ LoadOGLProc(PFNGLTEXPARAMETERFPROC, glTexParameterf);
+ LoadOGLProc(PFNGLTEXPARAMETERIPROC, glTexParameteri);
+ LoadOGLProc(PFNGLTEXSUBIMAGE2DPROC, glTexSubImage2D);
+ LoadOGLProc(PFNGLTRANSLATEFPROC, glTranslatef);
+ LoadOGLProc(PFNGLVERTEX2FPROC, glVertex2f);
+ LoadOGLProc(PFNGLVERTEX2FVPROC, glVertex2fv);
+ LoadOGLProc(PFNGLVERTEX3FPROC, glVertex3f);
+ LoadOGLProc(PFNGLVERTEX3FVPROC, glVertex3fv);
+ LoadOGLProc(PFNGLVERTEX4FPROC, glVertex4f);
+ LoadOGLProc(PFNGLVERTEX4FVPROC, glVertex4fv);
+ LoadOGLProc(PFNGLVERTEXPOINTERPROC, glVertexPointer);
+ LoadOGLProc(PFNGLVIEWPORTPROC, glViewport);
+
+ if (!mode) {
+ ogl_have_paletted_texture = 0;
+ ogl_have_secondary_color = 0;
+
+ ogl_use_paletted_texture = 0;
+ ogl_use_secondary_color = 0;
+
+ return;
+ }
+
+ if (ogl_missing_func) {
+ fprintf(stderr, "Unable to load OpenGL Library: missing function %s\n", ogl_missing_func);
+ exit(EXIT_FAILURE);
+ }
+
+ const char *ext = (const char *) pglGetString(GL_EXTENSIONS);
+
+ ogl_have_paletted_texture = check_token(ext, "GL_EXT_paletted_texture");
+ ogl_have_secondary_color = check_token(ext, "GL_EXT_secondary_color");
+
+#ifndef GL_COLOR_TABLE_WIDTH_EXT
+#define GL_COLOR_TABLE_WIDTH_EXT GL_COLOR_TABLE_WIDTH
+#endif
+
+ if (ogl_have_paletted_texture) {
+ ogl_missing_func = NULL;
+
+ LoadOGLProc(PFNGLCOLORTABLEEXTPROC, glColorTableEXT);
+ LoadOGLProc(PFNGLGETCOLORTABLEPARAMETERIVEXTPROC, glGetColorTableParameterivEXT);
+
+ if (!ogl_missing_func) {
+ GLint size;
+
+ pglColorTableEXT(GL_PROXY_TEXTURE_2D, GL_RGBA, 256, GL_BGRA, GL_UNSIGNED_BYTE, NULL);
+ pglGetColorTableParameterivEXT(GL_PROXY_TEXTURE_2D, GL_COLOR_TABLE_WIDTH_EXT, &size);
+
+ if (size != 256) {
+ ogl_have_paletted_texture = 0;
+ }
+ } else {
+ ogl_have_paletted_texture = 0;
+ }
+ }
+
+ if (ogl_have_secondary_color) {
+ ogl_missing_func = NULL;
+
+ LoadOGLProc(PFNGLSECONDARYCOLOR3FEXTPROC, glSecondaryColor3fEXT);
+ LoadOGLProc(PFNGLSECONDARYCOLOR3FVEXTPROC, glSecondaryColor3fvEXT);
+ LoadOGLProc(PFNGLSECONDARYCOLOR3UBEXTPROC, glSecondaryColor3ubEXT);
+ LoadOGLProc(PFNGLSECONDARYCOLOR3UBVEXTPROC, glSecondaryColor3ubvEXT);
+ LoadOGLProc(PFNGLSECONDARYCOLORPOINTEREXTPROC, glSecondaryColorPointerEXT);
+
+ if (ogl_missing_func) {
+ ogl_have_secondary_color = 0;
+ }
+ }
+
+ ogl_use_paletted_texture = ogl_have_paletted_texture;
+ ogl_use_secondary_color = ogl_have_secondary_color;
+
+ // fprintf(stderr, "RENDER DEBUG: pal:%d sec:%d\n", ogl_use_paletted_texture, ogl_use_secondary_color);
+}
+
+int check_for_errors(const char *file, int line)
+{
+ GLenum error;
+ int diderror = 0;
+
+ while ((error = pglGetError()) != GL_NO_ERROR) {
+ fprintf(stderr, "OPENGL ERROR: %04X (%s:%d)\n", error, file, line);
+
+ diderror = 1;
+ }
+
+ return diderror;
+}
diff --git a/src/oglfunc.h b/src/oglfunc.h
new file mode 100644
index 0000000..0ac05fc
--- /dev/null
+++ b/src/oglfunc.h
@@ -0,0 +1,222 @@
+#ifndef OGLFUNC_H
+#define OGLFUNC_H
+
+#include <GL/gl.h>
+#include <GL/glext.h>
+
+typedef void (APIENTRY *PFNGLALPHAFUNCPROC)(GLenum, GLclampf);
+typedef void (APIENTRY *PFNGLARRAYELEMENTPROC)(GLint);
+typedef void (APIENTRY *PFNGLBEGINPROC)(GLenum);
+typedef void (APIENTRY *PFNGLBINDTEXTUREPROC)(GLenum, GLuint);
+typedef void (APIENTRY *PFNGLBLENDFUNCPROC)(GLenum, GLenum);
+typedef void (APIENTRY *PFNGLCLEARPROC)(GLbitfield);
+typedef void (APIENTRY *PFNGLCLEARCOLORPROC)(GLclampf, GLclampf, GLclampf, GLclampf);
+typedef void (APIENTRY *PFNGLCOLOR3FPROC)(GLfloat, GLfloat, GLfloat);
+typedef void (APIENTRY *PFNGLCOLOR3FVPROC)(const GLfloat *);
+typedef void (APIENTRY *PFNGLCOLOR3UBPROC)(GLubyte, GLubyte, GLubyte);
+typedef void (APIENTRY *PFNGLCOLOR3UBVPROC)(const GLubyte *);
+typedef void (APIENTRY *PFNGLCOLOR4FPROC)(GLfloat, GLfloat, GLfloat, GLfloat);
+typedef void (APIENTRY *PFNGLCOLOR4FVPROC)(const GLfloat *);
+typedef void (APIENTRY *PFNGLCOLOR4UBPROC)(GLubyte, GLubyte, GLubyte, GLubyte);
+typedef void (APIENTRY *PFNGLCOLOR4UBVPROC)(const GLubyte *);
+typedef void (APIENTRY *PFNGLCOLORPOINTERPROC)(GLint, GLenum, GLsizei, const GLvoid *);
+typedef void (APIENTRY *PFNGLCULLFACEPROC)(GLenum);
+typedef void (APIENTRY *PFNGLDELETETEXTURESPROC)(GLsizei,const GLuint*);
+typedef void (APIENTRY *PFNGLDEPTHFUNCPROC)(GLenum);
+typedef void (APIENTRY *PFNGLDEPTHMASKPROC)(GLboolean);
+typedef void (APIENTRY *PFNGLDEPTHRANGEPROC)(GLclampd, GLclampd);
+typedef void (APIENTRY *PFNGLDISABLEPROC)(GLenum);
+typedef void (APIENTRY *PFNGLDISABLECLIENTSTATEPROC)(GLenum);
+typedef void (APIENTRY *PFNGLDRAWBUFFERPROC)(GLenum);
+typedef void (APIENTRY *PFNGLDRAWELEMENTSPROC)(GLenum, GLsizei, GLenum, const GLvoid *);
+typedef void (APIENTRY *PFNGLDRAWPIXELSPROC)(GLsizei, GLsizei, GLenum, GLenum, const GLvoid *);
+typedef void (APIENTRY *PFNGLDRAWRANGEELEMENTSPROC)(GLenum, GLuint, GLuint, GLsizei, GLenum, const GLvoid *);
+typedef void (APIENTRY *PFNGLENABLEPROC)(GLenum);
+typedef void (APIENTRY *PFNGLENABLECLIENTSTATEPROC)(GLenum);
+typedef void (APIENTRY *PFNGLENDPROC)(GLvoid);
+typedef void (APIENTRY *PFNGLFRONTFACEPROC)(GLenum);
+typedef void (APIENTRY *PFNGLFRUSTUMPROC)(GLdouble, GLdouble, GLdouble, GLdouble, GLdouble, GLdouble);
+typedef void (APIENTRY *PFNGLGENTEXTURESPROC)(GLsizei,GLuint*);
+typedef GLenum (APIENTRY *PFNGLGETERRORPROC)(void);
+typedef void (APIENTRY *PFNGLGETFLOATVPROC)(GLenum, GLfloat *);
+typedef void (APIENTRY *PFNGLGETINTEGERVPROC)(GLenum, GLint *);
+typedef const GLubyte* (APIENTRY *PFNGLGETSTRINGPROC)(GLenum);
+typedef void (APIENTRY *PFNGLHINTPROC)(GLenum, GLenum);
+typedef void (APIENTRY *PFNGLLOADIDENTITYPROC)(void);
+typedef void (APIENTRY *PFNGLLOADMATRIXFPROC)(const GLfloat *);
+typedef void (APIENTRY *PFNGLMATRIXMODEPROC)(GLenum);
+typedef void (APIENTRY *PFNGLMULTMATRIXFPROC)(const GLfloat *);
+typedef void (APIENTRY *PFNGLNORMALPOINTERPROC)(GLenum, GLsizei, const GLvoid *);
+typedef void (APIENTRY *PFNGLORTHOPROC)(GLdouble, GLdouble, GLdouble, GLdouble, GLdouble, GLdouble);
+typedef void (APIENTRY *PFNGLPIXELSTOREIPROC)(GLenum, GLint);
+typedef void (APIENTRY *PFNGLPIXELZOOMPROC)(GLfloat, GLfloat);
+typedef void (APIENTRY *PFNGLPOLYGONMODEPROC)(GLenum, GLenum);
+typedef void (APIENTRY *PFNGLPOLYGONOFFSETPROC)(GLfloat, GLfloat);
+typedef void (APIENTRY *PFNGLPOPATTRIBPROC)(void);
+typedef void (APIENTRY *PFNGLPOPCLIENTATTRIBPROC)(void);
+typedef void (APIENTRY *PFNGLPOPMATRIXPROC)(void);
+typedef void (APIENTRY *PFNGLPUSHATTRIBPROC)(GLbitfield);
+typedef void (APIENTRY *PFNGLPUSHCLIENTATTRIBPROC)(GLbitfield);
+typedef void (APIENTRY *PFNGLPUSHMATRIXPROC)(void);
+typedef void (APIENTRY *PFNGLRASTERPOS2IPROC)(GLint, GLint);
+typedef void (APIENTRY *PFNGLREADBUFFERPROC)(GLenum);
+typedef void (APIENTRY *PFNGLREADPIXELSPROC)(GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, GLvoid *);
+typedef void (APIENTRY *PFNGLROTATEFPROC)(GLfloat, GLfloat, GLfloat, GLfloat);
+typedef void (APIENTRY *PFNGLSCALEFPROC)(GLfloat,GLfloat,GLfloat);
+typedef void (APIENTRY *PFNGLSHADEMODELPROC)(GLenum);
+typedef void (APIENTRY *PFNGLTEXCOORD2FPROC)(GLfloat, GLfloat);
+typedef void (APIENTRY *PFNGLTEXCOORD2FVPROC)(const GLfloat *);
+typedef void (APIENTRY *PFNGLTEXCOORD3FPROC)(GLfloat, GLfloat, GLfloat);
+typedef void (APIENTRY *PFNGLTEXCOORD3FVPROC)(const GLfloat *);
+typedef void (APIENTRY *PFNGLTEXCOORD4FPROC)(GLfloat, GLfloat, GLfloat);
+typedef void (APIENTRY *PFNGLTEXCOORD4FVPROC)(const GLfloat *);
+typedef void (APIENTRY *PFNGLTEXCOORDPOINTERPROC)(GLint, GLenum, GLsizei, const GLvoid *);
+typedef void (APIENTRY *PFNGLTEXENVFPROC)(GLenum, GLenum, GLfloat);
+typedef void (APIENTRY *PFNGLTEXENVFVPROC)(GLenum, GLenum, const GLfloat *);
+typedef void (APIENTRY *PFNGLTEXENVIPROC)(GLenum, GLenum, GLint);
+typedef void (APIENTRY *PFNGLTEXIMAGE2DPROC)(GLenum,GLint,GLint,GLsizei,GLsizei,GLint,GLenum,GLenum,const GLvoid*);
+typedef void (APIENTRY *PFNGLTEXPARAMETERFPROC)(GLenum, GLenum, GLfloat);
+typedef void (APIENTRY *PFNGLTEXPARAMETERIPROC)(GLenum, GLenum, GLint);
+typedef void (APIENTRY *PFNGLTEXSUBIMAGE2DPROC)(GLenum,GLint,GLint,GLint,GLsizei,GLsizei,GLenum,GLenum,const GLvoid*);
+typedef void (APIENTRY *PFNGLTRANSLATEFPROC)(GLfloat, GLfloat, GLfloat);
+typedef void (APIENTRY *PFNGLVERTEX2FPROC)(GLfloat, GLfloat);
+typedef void (APIENTRY *PFNGLVERTEX2FVPROC)(const GLfloat *);
+typedef void (APIENTRY *PFNGLVERTEX3FPROC)(GLfloat, GLfloat, GLfloat);
+typedef void (APIENTRY *PFNGLVERTEX3FVPROC)(const GLfloat *);
+typedef void (APIENTRY *PFNGLVERTEX4FPROC)(GLfloat, GLfloat, GLfloat, GLfloat);
+typedef void (APIENTRY *PFNGLVERTEX4FVPROC)(const GLfloat *);
+typedef void (APIENTRY *PFNGLVERTEXPOINTERPROC)(GLint, GLenum, GLsizei, const GLvoid *);
+typedef void (APIENTRY *PFNGLVIEWPORTPROC)(GLint, GLint, GLsizei, GLsizei);
+
+/*
+typedef void (APIENTRY * PFNGLCOLORTABLEEXTPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const GLvoid *table);
+typedef void (APIENTRY * PFNGLGETCOLORTABLEEXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *data);
+typedef void (APIENTRY * PFNGLGETCOLORTABLEPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRY * PFNGLGETCOLORTABLEPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params);
+*/
+
+/*
+typedef void (APIENTRY * PFNGLSECONDARYCOLOR3BEXTPROC) (GLbyte red, GLbyte green, GLbyte blue);
+typedef void (APIENTRY * PFNGLSECONDARYCOLOR3BVEXTPROC) (const GLbyte *v);
+typedef void (APIENTRY * PFNGLSECONDARYCOLOR3DEXTPROC) (GLdouble red, GLdouble green, GLdouble blue);
+typedef void (APIENTRY * PFNGLSECONDARYCOLOR3DVEXTPROC) (const GLdouble *v);
+typedef void (APIENTRY * PFNGLSECONDARYCOLOR3FEXTPROC) (GLfloat red, GLfloat green, GLfloat blue);
+typedef void (APIENTRY * PFNGLSECONDARYCOLOR3FVEXTPROC) (const GLfloat *v);
+typedef void (APIENTRY * PFNGLSECONDARYCOLOR3IEXTPROC) (GLint red, GLint green, GLint blue);
+typedef void (APIENTRY * PFNGLSECONDARYCOLOR3IVEXTPROC) (const GLint *v);
+typedef void (APIENTRY * PFNGLSECONDARYCOLOR3SEXTPROC) (GLshort red, GLshort green, GLshort blue);
+typedef void (APIENTRY * PFNGLSECONDARYCOLOR3SVEXTPROC) (const GLshort *v);
+typedef void (APIENTRY * PFNGLSECONDARYCOLOR3UBEXTPROC) (GLubyte red, GLubyte green, GLubyte blue);
+typedef void (APIENTRY * PFNGLSECONDARYCOLOR3UBVEXTPROC) (const GLubyte *v);
+typedef void (APIENTRY * PFNGLSECONDARYCOLOR3UIEXTPROC) (GLuint red, GLuint green, GLuint blue);
+typedef void (APIENTRY * PFNGLSECONDARYCOLOR3UIVEXTPROC) (const GLuint *v);
+typedef void (APIENTRY * PFNGLSECONDARYCOLOR3USEXTPROC) (GLushort red, GLushort green, GLushort blue);
+typedef void (APIENTRY * PFNGLSECONDARYCOLOR3USVEXTPROC) (const GLushort *v);
+typedef void (APIENTRY * PFNGLSECONDARYCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+*/
+
+extern PFNGLALPHAFUNCPROC pglAlphaFunc;
+extern PFNGLARRAYELEMENTPROC pglArrayElement;
+extern PFNGLBEGINPROC pglBegin;
+extern PFNGLBINDTEXTUREPROC pglBindTexture;
+extern PFNGLBLENDFUNCPROC pglBlendFunc;
+extern PFNGLCLEARPROC pglClear;
+extern PFNGLCLEARCOLORPROC pglClearColor;
+extern PFNGLCOLOR3FPROC pglColor3f;
+extern PFNGLCOLOR3FVPROC pglColor3fv;
+extern PFNGLCOLOR3UBPROC pglColor3ub;
+extern PFNGLCOLOR3UBVPROC pglColor3ubv;
+extern PFNGLCOLOR4FPROC pglColor4f;
+extern PFNGLCOLOR4FVPROC pglColor4fv;
+extern PFNGLCOLOR4UBPROC pglColor4ub;
+extern PFNGLCOLOR4UBVPROC pglColor4ubv;
+extern PFNGLCOLORPOINTERPROC pglColorPointer;
+extern PFNGLCULLFACEPROC pglCullFace;
+extern PFNGLDELETETEXTURESPROC pglDeleteTextures;
+extern PFNGLDEPTHFUNCPROC pglDepthFunc;
+extern PFNGLDEPTHMASKPROC pglDepthMask;
+extern PFNGLDEPTHRANGEPROC pglDepthRange;
+extern PFNGLDISABLEPROC pglDisable;
+extern PFNGLDISABLECLIENTSTATEPROC pglDisableClientState;
+extern PFNGLDRAWBUFFERPROC pglDrawBuffer;
+extern PFNGLDRAWELEMENTSPROC pglDrawElements;
+extern PFNGLDRAWPIXELSPROC pglDrawPixels;
+extern PFNGLDRAWRANGEELEMENTSPROC pglDrawRangeElements;
+extern PFNGLENABLEPROC pglEnable;
+extern PFNGLENABLECLIENTSTATEPROC pglEnableClientState;
+extern PFNGLENDPROC pglEnd;
+extern PFNGLFRONTFACEPROC pglFrontFace;
+extern PFNGLFRUSTUMPROC pglFrustum;
+extern PFNGLGENTEXTURESPROC pglGenTextures;
+extern PFNGLGETERRORPROC pglGetError;
+extern PFNGLGETFLOATVPROC pglGetFloatv;
+extern PFNGLGETINTEGERVPROC pglGetIntegerv;
+extern PFNGLGETSTRINGPROC pglGetString;
+extern PFNGLHINTPROC pglHint;
+extern PFNGLLOADIDENTITYPROC pglLoadIdentity;
+extern PFNGLLOADMATRIXFPROC pglLoadMatrixf;
+extern PFNGLMATRIXMODEPROC pglMatrixMode;
+extern PFNGLMULTMATRIXFPROC pglMultMatrixf;
+extern PFNGLNORMALPOINTERPROC pglNormalPointer;
+extern PFNGLORTHOPROC pglOrtho;
+extern PFNGLPIXELSTOREIPROC pglPixelStorei;
+extern PFNGLPIXELZOOMPROC pglPixelZoom;
+extern PFNGLPOLYGONMODEPROC pglPolygonMode;
+extern PFNGLPOLYGONOFFSETPROC pglPolygonOffset;
+extern PFNGLPOPATTRIBPROC pglPopAttrib;
+extern PFNGLPOPCLIENTATTRIBPROC pglPopClientAttrib;
+extern PFNGLPOPMATRIXPROC pglPopMatrix;
+extern PFNGLPUSHATTRIBPROC pglPushAttrib;
+extern PFNGLPUSHCLIENTATTRIBPROC pglPushClientAttrib;
+extern PFNGLPUSHMATRIXPROC pglPushMatrix;
+extern PFNGLRASTERPOS2IPROC pglRasterPos2i;
+extern PFNGLREADBUFFERPROC pglReadBuffer;
+extern PFNGLREADPIXELSPROC pglReadPixels;
+extern PFNGLROTATEFPROC pglRotatef;
+extern PFNGLSCALEFPROC pglScalef;
+extern PFNGLSHADEMODELPROC pglShadeModel;
+extern PFNGLTEXCOORD2FPROC pglTexCoord2f;
+extern PFNGLTEXCOORD2FVPROC pglTexCoord2fv;
+extern PFNGLTEXCOORD3FPROC pglTexCoord3f;
+extern PFNGLTEXCOORD3FVPROC pglTexCoord3fv;
+extern PFNGLTEXCOORD4FPROC pglTexCoord4f;
+extern PFNGLTEXCOORD4FVPROC pglTexCoord4fv;
+extern PFNGLTEXCOORDPOINTERPROC pglTexCoordPointer;
+extern PFNGLTEXENVFPROC pglTexEnvf;
+extern PFNGLTEXENVFVPROC pglTexEnvfv;
+extern PFNGLTEXENVIPROC pglTexEnvi;
+extern PFNGLTEXIMAGE2DPROC pglTexImage2D;
+extern PFNGLTEXPARAMETERFPROC pglTexParameterf;
+extern PFNGLTEXPARAMETERIPROC pglTexParameteri;
+extern PFNGLTEXSUBIMAGE2DPROC pglTexSubImage2D;
+extern PFNGLTRANSLATEFPROC pglTranslatef;
+extern PFNGLVERTEX2FPROC pglVertex2f;
+extern PFNGLVERTEX2FVPROC pglVertex2fv;
+extern PFNGLVERTEX3FPROC pglVertex3f;
+extern PFNGLVERTEX3FVPROC pglVertex3fv;
+extern PFNGLVERTEX4FPROC pglVertex4f;
+extern PFNGLVERTEX4FVPROC pglVertex4fv;
+extern PFNGLVERTEXPOINTERPROC pglVertexPointer;
+extern PFNGLVIEWPORTPROC pglViewport;
+
+// GL_EXT_paletted_texture
+extern PFNGLCOLORTABLEEXTPROC pglColorTableEXT;
+extern PFNGLGETCOLORTABLEPARAMETERIVEXTPROC pglGetColorTableParameterivEXT;
+
+// GL_EXT_secondary_color
+extern PFNGLSECONDARYCOLOR3FEXTPROC pglSecondaryColor3fEXT;
+extern PFNGLSECONDARYCOLOR3FVEXTPROC pglSecondaryColor3fvEXT;
+extern PFNGLSECONDARYCOLOR3UBEXTPROC pglSecondaryColor3ubEXT;
+extern PFNGLSECONDARYCOLOR3UBVEXTPROC pglSecondaryColor3ubvEXT;
+extern PFNGLSECONDARYCOLORPOINTEREXTPROC pglSecondaryColorPointerEXT;
+
+extern int ogl_have_paletted_texture;
+extern int ogl_have_secondary_color;
+
+extern int ogl_use_paletted_texture;
+extern int ogl_use_secondary_color;
+
+extern void load_ogl_functions(int mode);
+extern int check_for_errors(const char *file, int line);
+
+#endif
diff --git a/src/opengl.c b/src/opengl.c
index c5dbc5d..327500a 100644
--- a/src/opengl.c
+++ b/src/opengl.c
@@ -2,8 +2,7 @@
#include <stdlib.h>
#include <string.h>
-#include <GL/gl.h>
-#include <GL/glext.h>
+#include "oglfunc.h"
#include "fixer.h"
@@ -55,11 +54,9 @@ static D3DTexture *CurrentlyBoundTexture = NULL;
#define TA_MAXVERTICES 2048
#define TA_MAXTRIANGLES 2048
-#if 0 /* NVIDIA header problem */
#if GL_EXT_secondary_color
extern PFNGLSECONDARYCOLORPOINTEREXTPROC pglSecondaryColorPointerEXT;
#endif
-#endif
typedef struct VertexArray
{
@@ -93,28 +90,28 @@ static void SetTranslucencyMode(enum TRANSLUCENCY_TYPE mode)
switch(mode) {
case TRANSLUCENCY_OFF:
if (TRIPTASTIC_CHEATMODE||MOTIONBLUR_CHEATMODE) {
- glBlendFunc(GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA);
+ pglBlendFunc(GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA);
} else {
- glBlendFunc(GL_ONE, GL_ZERO);
+ pglBlendFunc(GL_ONE, GL_ZERO);
}
break;
case TRANSLUCENCY_NORMAL:
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ pglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
break;
case TRANSLUCENCY_COLOUR:
- glBlendFunc(GL_ZERO, GL_SRC_COLOR);
+ pglBlendFunc(GL_ZERO, GL_SRC_COLOR);
break;
case TRANSLUCENCY_INVCOLOUR:
- glBlendFunc(GL_ZERO, GL_ONE_MINUS_SRC_COLOR);
+ pglBlendFunc(GL_ZERO, GL_ONE_MINUS_SRC_COLOR);
break;
case TRANSLUCENCY_GLOWING:
- glBlendFunc(GL_SRC_ALPHA, GL_ONE);
+ pglBlendFunc(GL_SRC_ALPHA, GL_ONE);
break;
case TRANSLUCENCY_DARKENINGCOLOUR:
- glBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_ZERO);
+ pglBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_ZERO);
break;
case TRANSLUCENCY_JUSTSETZ:
- glBlendFunc(GL_ZERO, GL_ONE);
+ pglBlendFunc(GL_ZERO, GL_ONE);
break;
default:
fprintf(stderr, "RenderPolygon.TranslucencyMode: invalid %d\n", RenderPolygon.TranslucencyMode);
@@ -133,31 +130,31 @@ A few things:
void InitOpenGL()
{
CurrentTranslucencyMode = TRANSLUCENCY_OFF;
- glBlendFunc(GL_ONE, GL_ZERO);
+ pglBlendFunc(GL_ONE, GL_ZERO);
CurrentFilteringMode = FILTERING_BILINEAR_OFF;
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+ pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
CurrentlyBoundTexture = NULL;
- glBindTexture(GL_TEXTURE_2D, 0);
+ pglBindTexture(GL_TEXTURE_2D, 0);
- glEnableClientState(GL_VERTEX_ARRAY);
- glVertexPointer(4, GL_FLOAT, sizeof(varr[0]), varr[0].v);
+ pglEnableClientState(GL_VERTEX_ARRAY);
+ pglVertexPointer(4, GL_FLOAT, sizeof(varr[0]), varr[0].v);
- glEnableClientState(GL_TEXTURE_COORD_ARRAY);
- glTexCoordPointer(2, GL_FLOAT, sizeof(varr[0]), varr[0].t);
+ pglEnableClientState(GL_TEXTURE_COORD_ARRAY);
+ pglTexCoordPointer(2, GL_FLOAT, sizeof(varr[0]), varr[0].t);
- glEnableClientState(GL_COLOR_ARRAY);
- glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(varr[0]), varr[0].c);
+ pglEnableClientState(GL_COLOR_ARRAY);
+ pglColorPointer(4, GL_UNSIGNED_BYTE, sizeof(varr[0]), varr[0].c);
#if 0
#if GL_EXT_secondary_color
if (useseparate) {
- glEnableClientState(GL_SEPARATE_COLOR_ARRAY_EXT);
+ pglEnableClientState(GL_SEPARATE_COLOR_ARRAY_EXT);
pglSecondaryColorPointerEXT(4, GL_UNSIGNED_BYTE, sizeof(svarr[0]), svarr[0].c);
} else {
- glDisableClientState(GL_SEPARATE_COLOR_ARRAY_EXT);
+ pglDisableClientState(GL_SEPARATE_COLOR_ARRAY_EXT);
}
#endif
#endif
@@ -181,15 +178,15 @@ static void FlushTriangleBuffers(int backup)
if (tarrc) {
#if 1
- glBegin(GL_TRIANGLES);
+ pglBegin(GL_TRIANGLES);
for (i = 0; i < tarrc; i++) {
- glArrayElement(tarr[i].a);
- glArrayElement(tarr[i].b);
- glArrayElement(tarr[i].c);
+ pglArrayElement(tarr[i].a);
+ pglArrayElement(tarr[i].b);
+ pglArrayElement(tarr[i].c);
}
- glEnd();
+ pglEnd();
#else
- glDrawElements(GL_TRIANGLES, tarrc*3, GL_UNSIGNED_INT, tarr);
+ pglDrawElements(GL_TRIANGLES, tarrc*3, GL_UNSIGNED_INT, tarr);
#endif
tarrc = 0;
@@ -202,36 +199,36 @@ static void FlushTriangleBuffers(int backup)
if (starrc) {
if (CurrentlyBoundTexture != NULL) {
if (!backup) CurrentlyBoundTexture = NULL;
- glBindTexture(GL_TEXTURE_2D, 0);
+ pglBindTexture(GL_TEXTURE_2D, 0);
}
if (CurrentTranslucencyMode != TRANSLUCENCY_GLOWING) {
if (!backup) CurrentTranslucencyMode = TRANSLUCENCY_GLOWING;
SetTranslucencyMode(TRANSLUCENCY_GLOWING);
//if (CurrentTranslucencyMode == TRANSLUCENCY_OFF)
- // glEnable(GL_BLEND);
+ // pglEnable(GL_BLEND);
//glBlendFunc(GL_SRC_ALPHA, GL_ONE);
}
- glDisableClientState(GL_TEXTURE_COORD_ARRAY);
+ pglDisableClientState(GL_TEXTURE_COORD_ARRAY);
#if 1
- glBegin(GL_TRIANGLES);
+ pglBegin(GL_TRIANGLES);
for (i = 0; i < starrc; i++) {
- glArrayElement(starr[i].a);
- glArrayElement(starr[i].b);
- glArrayElement(starr[i].c);
+ pglArrayElement(starr[i].a);
+ pglArrayElement(starr[i].b);
+ pglArrayElement(starr[i].c);
}
- glEnd();
+ pglEnd();
#else
- glDrawElements(GL_TRIANGLES, starrc*3, GL_UNSIGNED_INT, starr);
+ pglDrawElements(GL_TRIANGLES, starrc*3, GL_UNSIGNED_INT, starr);
#endif
- glEnableClientState(GL_TEXTURE_COORD_ARRAY);
+ pglEnableClientState(GL_TEXTURE_COORD_ARRAY);
if (backup) {
if (CurrentlyBoundTexture)
- glBindTexture(GL_TEXTURE_2D, CurrentlyBoundTexture->id);
+ pglBindTexture(GL_TEXTURE_2D, CurrentlyBoundTexture->id);
if (CurrentTranslucencyMode != TRANSLUCENCY_GLOWING)
SetTranslucencyMode(CurrentTranslucencyMode);
} else {
@@ -256,24 +253,24 @@ static void CheckBoundTextureIsCorrect(D3DTexture *tex)
FlushTriangleBuffers(1);
if (tex == NULL) {
- glBindTexture(GL_TEXTURE_2D, 0);
+ pglBindTexture(GL_TEXTURE_2D, 0);
CurrentlyBoundTexture = NULL;
return;
}
- glBindTexture(GL_TEXTURE_2D, tex->id);
+ pglBindTexture(GL_TEXTURE_2D, tex->id);
if (tex->filter != CurrentFilteringMode) {
switch(CurrentFilteringMode) {
case FILTERING_BILINEAR_OFF:
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+ pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
break;
case FILTERING_BILINEAR_ON:
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
break;
default:
break;
@@ -294,12 +291,12 @@ static void CheckFilteringModeIsCorrect(enum FILTERING_MODE_ID filter)
switch(CurrentFilteringMode) {
case FILTERING_BILINEAR_OFF:
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+ pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
break;
case FILTERING_BILINEAR_ON:
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
break;
default:
break;
@@ -430,14 +427,14 @@ static void SelectPolygonBeginType(int points)
switch(points) {
case 3:
- glBegin(GL_TRIANGLES);
+ pglBegin(GL_TRIANGLES);
break;
case 4:
case 5:
case 6:
case 7:
case 8:
- glBegin(GL_TRIANGLE_FAN);
+ pglBegin(GL_TRIANGLE_FAN);
break;
default:
fprintf(stderr, "SelectPolygonBeginType: points = %d\n", points);
@@ -451,24 +448,24 @@ GLuint CreateOGLTexture(D3DTexture *tex, unsigned char *buf)
FlushTriangleBuffers(1);
- glGenTextures(1, &h);
+ pglGenTextures(1, &h);
- glBindTexture(GL_TEXTURE_2D, h);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
+ pglBindTexture(GL_TEXTURE_2D, h);
+ pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
+ pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex->w, tex->h, 0, GL_RGBA, GL_UNSIGNED_BYTE, buf);
+ pglTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex->w, tex->h, 0, GL_RGBA, GL_UNSIGNED_BYTE, buf);
- glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+ pglTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
tex->id = h;
tex->filter = FILTERING_BILINEAR_ON;
if (CurrentlyBoundTexture)
- glBindTexture(GL_TEXTURE_2D, CurrentlyBoundTexture->id); /* restore current */
+ pglBindTexture(GL_TEXTURE_2D, CurrentlyBoundTexture->id); /* restore current */
return h;
}
@@ -477,7 +474,7 @@ void ReleaseD3DTexture(void *tex)
{
D3DTexture *TextureHandle = (D3DTexture *)tex;
- glDeleteTextures(1, &(TextureHandle->id));
+ pglDeleteTextures(1, &(TextureHandle->id));
free(TextureHandle);
}
@@ -500,34 +497,34 @@ void ThisFramesRenderingHasFinished()
void FlushD3DZBuffer()
{
- glClear(GL_DEPTH_BUFFER_BIT);
+ pglClear(GL_DEPTH_BUFFER_BIT);
}
void SecondFlushD3DZBuffer()
{
FlushTriangleBuffers(0);
- glClear(GL_DEPTH_BUFFER_BIT);
+ pglClear(GL_DEPTH_BUFFER_BIT);
}
void D3D_DecalSystem_Setup()
{
FlushTriangleBuffers(0);
- glDepthMask(GL_FALSE);
+ pglDepthMask(GL_FALSE);
/* this does stop zfighting with bulletmarks on walls... */
- glEnable(GL_POLYGON_OFFSET_FILL);
- glPolygonOffset(-8.0, -8.0);
+ pglEnable(GL_POLYGON_OFFSET_FILL);
+ pglPolygonOffset(-8.0, -8.0);
}
void D3D_DecalSystem_End()
{
FlushTriangleBuffers(0);
- glDepthMask(GL_TRUE);
+ pglDepthMask(GL_TRUE);
- glDisable(GL_POLYGON_OFFSET_FILL);
+ pglDisable(GL_POLYGON_OFFSET_FILL);
}
/* ** */
@@ -542,7 +539,7 @@ void D3D_Rectangle(int x0, int y0, int x1, int y1, int r, int g, int b, int a)
CheckTranslucencyModeIsCorrect(TRANSLUCENCY_GLOWING);
CheckBoundTextureIsCorrect(NULL);
- glColor4ub(r, g, b, a);
+ pglColor4ub(r, g, b, a);
x[0] = x0;
x[0] = (x[0] - ScreenDescriptorBlock.SDB_CentreX)/ScreenDescriptorBlock.SDB_CentreX;
@@ -566,15 +563,15 @@ void D3D_Rectangle(int x0, int y0, int x1, int y1, int r, int g, int b, int a)
SelectPolygonBeginType(3); /* triangles */
- glVertex3f(x[0], y[0], -1.0f);
- glVertex3f(x[1], y[1], -1.0f);
- glVertex3f(x[3], y[3], -1.0f);
+ pglVertex3f(x[0], y[0], -1.0f);
+ pglVertex3f(x[1], y[1], -1.0f);
+ pglVertex3f(x[3], y[3], -1.0f);
- glVertex3f(x[1], y[1], -1.0f);
- glVertex3f(x[2], y[2], -1.0f);
- glVertex3f(x[3], y[3], -1.0f);
+ pglVertex3f(x[1], y[1], -1.0f);
+ pglVertex3f(x[2], y[2], -1.0f);
+ pglVertex3f(x[3], y[3], -1.0f);
- glEnd();
+ pglEnd();
}
/* ** */
@@ -1097,7 +1094,7 @@ void D3D_PlayerOnFireOverlay()
CheckBoundTextureIsCorrect(TextureHandle);
CheckFilteringModeIsCorrect(FILTERING_BILINEAR_ON);
- glColor4ub(r, g, b, a);
+ pglColor4ub(r, g, b, a);
u = (FastRandom()&255)/256.0f;
v = (FastRandom()&255)/256.0f;
@@ -1121,21 +1118,21 @@ void D3D_PlayerOnFireOverlay()
SelectPolygonBeginType(3); /* triangles */
- glTexCoord2f(s[0], t[0]);
- glVertex3f(x[0], y[0], -1.0f);
- glTexCoord2f(s[1], t[1]);
- glVertex3f(x[1], y[1], -1.0f);
- glTexCoord2f(s[3], t[3]);
- glVertex3f(x[3], y[3], -1.0f);
+ pglTexCoord2f(s[0], t[0]);
+ pglVertex3f(x[0], y[0], -1.0f);
+ pglTexCoord2f(s[1], t[1]);
+ pglVertex3f(x[1], y[1], -1.0f);
+ pglTexCoord2f(s[3], t[3]);
+ pglVertex3f(x[3], y[3], -1.0f);
- glTexCoord2f(s[1], t[1]);
- glVertex3f(x[1], y[1], -1.0f);
- glTexCoord2f(s[2], t[2]);
- glVertex3f(x[2], y[2], -1.0f);
- glTexCoord2f(s[3], t[3]);
- glVertex3f(x[3], y[3], -1.0f);
+ pglTexCoord2f(s[1], t[1]);
+ pglVertex3f(x[1], y[1], -1.0f);
+ pglTexCoord2f(s[2], t[2]);
+ pglVertex3f(x[2], y[2], -1.0f);
+ pglTexCoord2f(s[3], t[3]);
+ pglVertex3f(x[3], y[3], -1.0f);
- glEnd();
+ pglEnd();
}
void D3D_PlayerDamagedOverlay(int intensity)
@@ -1174,7 +1171,7 @@ void D3D_PlayerDamagedOverlay(int intensity)
r = (colour >> 16) & 0xFF;
a = (colour >> 24) & 0xFF;
- glColor4ub(r, g, b, a);
+ pglColor4ub(r, g, b, a);
CheckTranslucencyModeIsCorrect(TRANSLUCENCY_INVCOLOUR);
for (i = 0; i < 2; i++) {
@@ -1202,21 +1199,21 @@ void D3D_PlayerDamagedOverlay(int intensity)
SelectPolygonBeginType(3); /* triangles */
- glTexCoord2f(s[0], t[0]);
- glVertex3f(x[0], y[0], -1.0f);
- glTexCoord2f(s[1], t[1]);
- glVertex3f(x[1], y[1], -1.0f);
- glTexCoord2f(s[3], t[3]);
- glVertex3f(x[3], y[3], -1.0f);
+ pglTexCoord2f(s[0], t[0]);
+ pglVertex3f(x[0], y[0], -1.0f);
+ pglTexCoord2f(s[1], t[1]);
+ pglVertex3f(x[1], y[1], -1.0f);
+ pglTexCoord2f(s[3], t[3]);
+ pglVertex3f(x[3], y[3], -1.0f);
- glTexCoord2f(s[1], t[1]);
- glVertex3f(x[1], y[1], -1.0f);
- glTexCoord2f(s[2], t[2]);
- glVertex3f(x[2], y[2], -1.0f);
- glTexCoord2f(s[3], t[3]);
- glVertex3f(x[3], y[3], -1.0f);
+ pglTexCoord2f(s[1], t[1]);
+ pglVertex3f(x[1], y[1], -1.0f);
+ pglTexCoord2f(s[2], t[2]);
+ pglVertex3f(x[2], y[2], -1.0f);
+ pglTexCoord2f(s[3], t[3]);
+ pglVertex3f(x[3], y[3], -1.0f);
- glEnd();
+ pglEnd();
colour = baseColour + (intensity<<24);
@@ -1225,7 +1222,7 @@ void D3D_PlayerDamagedOverlay(int intensity)
r = (colour >> 16) & 0xFF;
a = (colour >> 24) & 0xFF;
- glColor4ub(r, g, b, a);
+ pglColor4ub(r, g, b, a);
CheckTranslucencyModeIsCorrect(TRANSLUCENCY_GLOWING);
}
@@ -1249,7 +1246,7 @@ void DrawNoiseOverlay(int tr)
CheckTranslucencyModeIsCorrect(TRANSLUCENCY_GLOWING);
CheckBoundTextureIsCorrect(tex);
CheckFilteringModeIsCorrect(FILTERING_BILINEAR_ON);
- glDepthFunc(GL_ALWAYS);
+ pglDepthFunc(GL_ALWAYS);
u = FastRandom()&255;
v = FastRandom()&255;
@@ -1272,25 +1269,25 @@ void DrawNoiseOverlay(int tr)
t[3] = (v + size) / 256.0f;
SelectPolygonBeginType(3); /* triangles */
- glColor4ub(r, g, b, tr);
+ pglColor4ub(r, g, b, tr);
- glTexCoord2f(s[0], t[0]);
- glVertex3f(x[0], y[0], 1.0f);
- glTexCoord2f(s[1], t[1]);
- glVertex3f(x[1], y[1], 1.0f);
- glTexCoord2f(s[3], t[3]);
- glVertex3f(x[3], y[3], 1.0f);
+ pglTexCoord2f(s[0], t[0]);
+ pglVertex3f(x[0], y[0], 1.0f);
+ pglTexCoord2f(s[1], t[1]);
+ pglVertex3f(x[1], y[1], 1.0f);
+ pglTexCoord2f(s[3], t[3]);
+ pglVertex3f(x[3], y[3], 1.0f);
- glTexCoord2f(s[1], t[1]);
- glVertex3f(x[1], y[1], 1.0f);
- glTexCoord2f(s[2], t[2]);
- glVertex3f(x[2], y[2], 1.0f);
- glTexCoord2f(s[3], t[3]);
- glVertex3f(x[3], y[3], 1.0f);
+ pglTexCoord2f(s[1], t[1]);
+ pglVertex3f(x[1], y[1], 1.0f);
+ pglTexCoord2f(s[2], t[2]);
+ pglVertex3f(x[2], y[2], 1.0f);
+ pglTexCoord2f(s[3], t[3]);
+ pglVertex3f(x[3], y[3], 1.0f);
- glEnd();
+ pglEnd();
- glDepthFunc(GL_LEQUAL);
+ pglDepthFunc(GL_LEQUAL);
}
void D3D_ScreenInversionOverlay()
@@ -1308,7 +1305,7 @@ void D3D_ScreenInversionOverlay()
CheckBoundTextureIsCorrect(tex);
CheckFilteringModeIsCorrect(FILTERING_BILINEAR_ON);
- glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
+ pglColor4f(1.0f, 1.0f, 1.0f, 1.0f);
for (i = 0; i < 2; i++) {
GLfloat x[4], y[4], s[4], t[4];
@@ -1335,21 +1332,21 @@ void D3D_ScreenInversionOverlay()
SelectPolygonBeginType(3); /* triangles */
- glTexCoord2f(s[0], t[0]);
- glVertex3f(x[0], y[0], 1.0f);
- glTexCoord2f(s[1], t[1]);
- glVertex3f(x[1], y[1], 1.0f);
- glTexCoord2f(s[3], t[3]);
- glVertex3f(x[3], y[3], 1.0f);
+ pglTexCoord2f(s[0], t[0]);
+ pglVertex3f(x[0], y[0], 1.0f);
+ pglTexCoord2f(s[1], t[1]);
+ pglVertex3f(x[1], y[1], 1.0f);
+ pglTexCoord2f(s[3], t[3]);
+ pglVertex3f(x[3], y[3], 1.0f);
- glTexCoord2f(s[1], t[1]);
- glVertex3f(x[1], y[1], 1.0f);
- glTexCoord2f(s[2], t[2]);
- glVertex3f(x[2], y[2], 1.0f);
- glTexCoord2f(s[3], t[3]);
- glVertex3f(x[3], y[3], 1.0f);
+ pglTexCoord2f(s[1], t[1]);
+ pglVertex3f(x[1], y[1], 1.0f);
+ pglTexCoord2f(s[2], t[2]);
+ pglVertex3f(x[2], y[2], 1.0f);
+ pglTexCoord2f(s[3], t[3]);
+ pglVertex3f(x[3], y[3], 1.0f);
- glEnd();
+ pglEnd();
CheckTranslucencyModeIsCorrect(TRANSLUCENCY_COLOUR);
}
@@ -1359,22 +1356,22 @@ void D3D_PredatorScreenInversionOverlay()
{
CheckTranslucencyModeIsCorrect(TRANSLUCENCY_DARKENINGCOLOUR);
CheckBoundTextureIsCorrect(NULL);
- glDepthFunc(GL_ALWAYS);
+ pglDepthFunc(GL_ALWAYS);
SelectPolygonBeginType(3); /* triangles */
- glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
+ pglColor4f(1.0f, 1.0f, 1.0f, 1.0f);
- glVertex3f(-1.0f, -1.0f, 1.0f);
- glVertex3f( 1.0f, -1.0f, 1.0f);
- glVertex3f(-1.0f, 1.0f, 1.0f);
+ pglVertex3f(-1.0f, -1.0f, 1.0f);
+ pglVertex3f( 1.0f, -1.0f, 1.0f);
+ pglVertex3f(-1.0f, 1.0f, 1.0f);
- glVertex3f( 1.0f, -1.0f, 1.0f);
- glVertex3f( 1.0f, 1.0f, 1.0f);
- glVertex3f(-1.0f, 1.0f, 1.0f);
+ pglVertex3f( 1.0f, -1.0f, 1.0f);
+ pglVertex3f( 1.0f, 1.0f, 1.0f);
+ pglVertex3f(-1.0f, 1.0f, 1.0f);
- glEnd();
+ pglEnd();
- glDepthFunc(GL_LEQUAL);
+ pglDepthFunc(GL_LEQUAL);
}
void DrawScanlinesOverlay(float level)
@@ -1390,7 +1387,7 @@ void DrawScanlinesOverlay(float level)
CheckTranslucencyModeIsCorrect(TRANSLUCENCY_NORMAL);
CheckBoundTextureIsCorrect(tex);
CheckFilteringModeIsCorrect(FILTERING_BILINEAR_ON);
- glDepthFunc(GL_ALWAYS);
+ pglDepthFunc(GL_ALWAYS);
c = 255;
a = 64.0f+level*64.0f;
@@ -1398,7 +1395,7 @@ void DrawScanlinesOverlay(float level)
v = 128.0f;
size = 128.0f*(1.0f-level*0.8f);
- glColor4ub(c, c, c, a);
+ pglColor4ub(c, c, c, a);
x[0] = -1.0f;
y[0] = -1.0f;
@@ -1419,22 +1416,22 @@ void DrawScanlinesOverlay(float level)
SelectPolygonBeginType(3); /* triangles */
- glTexCoord2f(s[0], t[0]);
- glVertex3f(x[0], y[0], 1.0f);
- glTexCoord2f(s[1], t[1]);
- glVertex3f(x[1], y[1], 1.0f);
- glTexCoord2f(s[3], t[3]);
- glVertex3f(x[3], y[3], 1.0f);
+ pglTexCoord2f(s[0], t[0]);
+ pglVertex3f(x[0], y[0], 1.0f);
+ pglTexCoord2f(s[1], t[1]);
+ pglVertex3f(x[1], y[1], 1.0f);
+ pglTexCoord2f(s[3], t[3]);
+ pglVertex3f(x[3], y[3], 1.0f);
- glTexCoord2f(s[1], t[1]);
- glVertex3f(x[1], y[1], 1.0f);
- glTexCoord2f(s[2], t[2]);
- glVertex3f(x[2], y[2], 1.0f);
- glTexCoord2f(s[3], t[3]);
- glVertex3f(x[3], y[3], 1.0f);
+ pglTexCoord2f(s[1], t[1]);
+ pglVertex3f(x[1], y[1], 1.0f);
+ pglTexCoord2f(s[2], t[2]);
+ pglVertex3f(x[2], y[2], 1.0f);
+ pglTexCoord2f(s[3], t[3]);
+ pglVertex3f(x[3], y[3], 1.0f);
- glEnd();
- glDepthFunc(GL_LEQUAL);
+ pglEnd();
+ pglDepthFunc(GL_LEQUAL);
}
void D3D_FadeDownScreen(int brightness, int colour)
@@ -1454,7 +1451,7 @@ void D3D_FadeDownScreen(int brightness, int colour)
r = (colour >> 16) & 0xFF;
a = (colour >> 24) & 0xFF;
- glColor4ub(r, g, b, a);
+ pglColor4ub(r, g, b, a);
x[0] = -1.0f;
y[0] = -1.0f;
@@ -1467,15 +1464,15 @@ void D3D_FadeDownScreen(int brightness, int colour)
SelectPolygonBeginType(3); /* triangles */
- glVertex3f(x[0], y[0], -1.0f);
- glVertex3f(x[1], y[1], -1.0f);
- glVertex3f(x[3], y[3], -1.0f);
+ pglVertex3f(x[0], y[0], -1.0f);
+ pglVertex3f(x[1], y[1], -1.0f);
+ pglVertex3f(x[3], y[3], -1.0f);
- glVertex3f(x[1], y[1], -1.0f);
- glVertex3f(x[2], y[2], -1.0f);
- glVertex3f(x[3], y[3], -1.0f);
+ pglVertex3f(x[1], y[1], -1.0f);
+ pglVertex3f(x[2], y[2], -1.0f);
+ pglVertex3f(x[3], y[3], -1.0f);
- glEnd();
+ pglEnd();
}
void D3D_HUD_Setup()
@@ -1484,7 +1481,7 @@ void D3D_HUD_Setup()
CheckTranslucencyModeIsCorrect(TRANSLUCENCY_GLOWING);
- glDepthFunc(GL_LEQUAL);
+ pglDepthFunc(GL_LEQUAL);
}
void D3D_HUDQuad_Output(int imageNumber, struct VertexTag *quadVerticesPtr, unsigned int colour)
@@ -1519,7 +1516,7 @@ void D3D_HUDQuad_Output(int imageNumber, struct VertexTag *quadVerticesPtr, unsi
r = (colour >> 16) & 0xFF;
a = (colour >> 24) & 0xFF;
- glColor4ub(r, g, b, a);
+ pglColor4ub(r, g, b, a);
for (i = 0; i < 4; i++) {
x[i] = quadVerticesPtr[i].X;
@@ -1533,21 +1530,21 @@ void D3D_HUDQuad_Output(int imageNumber, struct VertexTag *quadVerticesPtr, unsi
SelectPolygonBeginType(3); /* triangles */
- glTexCoord2f(s[0], t[0]);
- glVertex3f(x[0], y[0], -1.0f);
- glTexCoord2f(s[1], t[1]);
- glVertex3f(x[1], y[1], -1.0f);
- glTexCoord2f(s[3], t[3]);
- glVertex3f(x[3], y[3], -1.0f);
+ pglTexCoord2f(s[0], t[0]);
+ pglVertex3f(x[0], y[0], -1.0f);
+ pglTexCoord2f(s[1], t[1]);
+ pglVertex3f(x[1], y[1], -1.0f);
+ pglTexCoord2f(s[3], t[3]);
+ pglVertex3f(x[3], y[3], -1.0f);
- glTexCoord2f(s[1], t[1]);
- glVertex3f(x[1], y[1], -1.0f);
- glTexCoord2f(s[2], t[2]);
- glVertex3f(x[2], y[2], -1.0f);
- glTexCoord2f(s[3], t[3]);
- glVertex3f(x[3], y[3], -1.0f);
+ pglTexCoord2f(s[1], t[1]);
+ pglVertex3f(x[1], y[1], -1.0f);
+ pglTexCoord2f(s[2], t[2]);
+ pglVertex3f(x[2], y[2], -1.0f);
+ pglTexCoord2f(s[3], t[3]);
+ pglVertex3f(x[3], y[3], -1.0f);
- glEnd();
+ pglEnd();
}
void D3D_RenderHUDNumber_Centred(unsigned int number,int x,int y,int colour)
@@ -2339,7 +2336,7 @@ void D3D_DrawColourBar(int yTop, int yBottom, int rScale, int gScale, int bScale
unsigned int c;
c = GammaValues[i];
- glColor4ub(MUL_FIXED(c,rScale), MUL_FIXED(c,gScale), MUL_FIXED(c,bScale), 0);
+ pglColor4ub(MUL_FIXED(c,rScale), MUL_FIXED(c,gScale), MUL_FIXED(c,bScale), 0);
x[0] = (Global_VDB_Ptr->VDB_ClipRight*i)/255;
x[0] = (x[0] - ScreenDescriptorBlock.SDB_CentreX)/ScreenDescriptorBlock.SDB_CentreX;
@@ -2353,7 +2350,7 @@ void D3D_DrawColourBar(int yTop, int yBottom, int rScale, int gScale, int bScale
i++;
c = GammaValues[i];
- glColor4ub(MUL_FIXED(c,rScale), MUL_FIXED(c,gScale), MUL_FIXED(c,bScale), 0);
+ pglColor4ub(MUL_FIXED(c,rScale), MUL_FIXED(c,gScale), MUL_FIXED(c,bScale), 0);
x[2] = (Global_VDB_Ptr->VDB_ClipRight*i)/255;
x[2] = (x[2] - ScreenDescriptorBlock.SDB_CentreX)/ScreenDescriptorBlock.SDB_CentreX;
y[2] = yBottom;
@@ -2365,16 +2362,16 @@ void D3D_DrawColourBar(int yTop, int yBottom, int rScale, int gScale, int bScale
y[3] = -(y[3] - ScreenDescriptorBlock.SDB_CentreY)/ScreenDescriptorBlock.SDB_CentreY;
- glVertex3f(x[0], y[0], -1.0f);
- glVertex3f(x[1], y[1], -1.0f);
- glVertex3f(x[3], y[3], -1.0f);
+ pglVertex3f(x[0], y[0], -1.0f);
+ pglVertex3f(x[1], y[1], -1.0f);
+ pglVertex3f(x[3], y[3], -1.0f);
- glVertex3f(x[1], y[1], -1.0f);
- glVertex3f(x[2], y[2], -1.0f);
- glVertex3f(x[3], y[3], -1.0f);
+ pglVertex3f(x[1], y[1], -1.0f);
+ pglVertex3f(x[2], y[2], -1.0f);
+ pglVertex3f(x[3], y[3], -1.0f);
}
- glEnd();
+ pglEnd();
}
void ColourFillBackBuffer(int FillColour)
@@ -2386,9 +2383,9 @@ void ColourFillBackBuffer(int FillColour)
r = ((FillColour >> 16) & 0xFF) / 255.0f;
a = ((FillColour >> 24) & 0xFF) / 255.0f;
- glClearColor(r, g, b, a);
+ pglClearColor(r, g, b, a);
- glClear(GL_COLOR_BUFFER_BIT);
+ pglClear(GL_COLOR_BUFFER_BIT);
}
void ColourFillBackBufferQuad(int FillColour, int x0, int y0, int x1, int y1)
@@ -2407,7 +2404,7 @@ void ColourFillBackBufferQuad(int FillColour, int x0, int y0, int x1, int y1)
r = ((FillColour >> 16) & 0xFF);
a = ((FillColour >> 24) & 0xFF);
- glColor4ub(r, g, b, a);
+ pglColor4ub(r, g, b, a);
x[0] = x0;
x[0] = (x[0] - ScreenDescriptorBlock.SDB_CentreX)/ScreenDescriptorBlock.SDB_CentreX;
@@ -2431,15 +2428,15 @@ void ColourFillBackBufferQuad(int FillColour, int x0, int y0, int x1, int y1)
SelectPolygonBeginType(3); /* triangles */
- glVertex3f(x[0], y[0], -1.0f);
- glVertex3f(x[1], y[1], -1.0f);
- glVertex3f(x[3], y[3], -1.0f);
+ pglVertex3f(x[0], y[0], -1.0f);
+ pglVertex3f(x[1], y[1], -1.0f);
+ pglVertex3f(x[3], y[3], -1.0f);
- glVertex3f(x[1], y[1], -1.0f);
- glVertex3f(x[2], y[2], -1.0f);
- glVertex3f(x[3], y[3], -1.0f);
+ pglVertex3f(x[1], y[1], -1.0f);
+ pglVertex3f(x[2], y[2], -1.0f);
+ pglVertex3f(x[3], y[3], -1.0f);
- glEnd();
+ pglEnd();
}
void D3D_DrawBackdrop()
@@ -2509,30 +2506,30 @@ void BltImage(RECT *dest, DDSurface *image, RECT *src)
height = dest->bottom - dest->top + 1;
height1 = src->bottom - src->top + 1;
- glPushAttrib(GL_COLOR_BUFFER_BIT | GL_PIXEL_MODE_BIT | GL_DEPTH_BUFFER_BIT | GL_ENABLE_BIT);
- glPushClientAttrib(GL_CLIENT_PIXEL_STORE_BIT);
+ pglPushAttrib(GL_COLOR_BUFFER_BIT | GL_PIXEL_MODE_BIT | GL_DEPTH_BUFFER_BIT | GL_ENABLE_BIT);
+ pglPushClientAttrib(GL_CLIENT_PIXEL_STORE_BIT);
- glDisable(GL_BLEND);
- glDisable(GL_DEPTH_TEST);
- glDisable(GL_TEXTURE_2D);
+ pglDisable(GL_BLEND);
+ pglDisable(GL_DEPTH_TEST);
+ pglDisable(GL_TEXTURE_2D);
- glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
- glPixelStorei(GL_UNPACK_ROW_LENGTH, image->w);
- glPixelZoom((double)width/(double)width1, (double)height/(double)height1);
+ pglPixelStorei(GL_UNPACK_ALIGNMENT, 1);
+ pglPixelStorei(GL_UNPACK_ROW_LENGTH, image->w);
+ pglPixelZoom((double)width/(double)width1, (double)height/(double)height1);
- glMatrixMode(GL_PROJECTION);
- glPushMatrix();
- glLoadIdentity();
+ pglMatrixMode(GL_PROJECTION);
+ pglPushMatrix();
+ pglLoadIdentity();
- glOrtho(0.0, ScreenDescriptorBlock.SDB_Width, 0.0, ScreenDescriptorBlock.SDB_Height, -1.0, 1.0);
- glRasterPos2i(dest->left, ScreenDescriptorBlock.SDB_Height-dest->bottom);
+ pglOrtho(0.0, ScreenDescriptorBlock.SDB_Width, 0.0, ScreenDescriptorBlock.SDB_Height, -1.0, 1.0);
+ pglRasterPos2i(dest->left, ScreenDescriptorBlock.SDB_Height-dest->bottom);
- glDrawPixels(width1, height1, GL_RGBA, GL_UNSIGNED_BYTE, image->buf);
+ pglDrawPixels(width1, height1, GL_RGBA, GL_UNSIGNED_BYTE, image->buf);
- glPopMatrix();
+ pglPopMatrix();
- glPopClientAttrib();
- glPopAttrib();;
+ pglPopClientAttrib();
+ pglPopAttrib();;
}
/* ** */
@@ -2696,7 +2693,7 @@ void PostLandscapeRendering()
// CheckTranslucencyModeIsCorrect(TRANSLUCENCY_NORMAL);
FlushTriangleBuffers(1);
- glDepthMask(GL_FALSE);
+ pglDepthMask(GL_FALSE);
WaterFallBase = 109952;
@@ -2709,7 +2706,7 @@ void PostLandscapeRendering()
// D3D_DrawWaterPatch(-100000, WaterFallBase, 538490);
FlushTriangleBuffers(1);
- glDepthMask(GL_TRUE);
+ pglDepthMask(GL_TRUE);
}
if (drawStream)
{
@@ -4881,7 +4878,7 @@ void D3D_DrawCable(VECTORCH *centrePtr, MATRIXCH *orientationPtr)
CurrTextureHandle = NULL;
CheckBoundTextureIsCorrect(NULL);
CheckTranslucencyModeIsCorrect(TRANSLUCENCY_GLOWING);
- glDepthMask(GL_FALSE);
+ pglDepthMask(GL_FALSE);
MeshXScale = 4096/16;
MeshZScale = 4096/16;
@@ -4967,5 +4964,5 @@ void D3D_DrawCable(VECTORCH *centrePtr, MATRIXCH *orientationPtr)
}
}
- glDepthMask(GL_TRUE);
+ pglDepthMask(GL_TRUE);
}