1 
2 #ifndef BGLBUILD_H_INCLUDED_
3 #define BGLBUILD_H_INCLUDED_
4 
5 #ifdef USE_OPENGL
6 
7 #if !defined GEKKO && !defined EDUKE32_GLES
8 # define DYNAMIC_GL
9 # define DYNAMIC_GLU
10 # define DYNAMIC_GLEXT
11 # define USE_GLEXT
12 #endif
13 
14 #if defined EDUKE32_OSX
15 # include <OpenGL/glu.h>
16 #else
17 # include <GL/glu.h>
18 #endif
19 #if defined EDUKE32_GLES
20 # include "jwzgles.h"
21 #endif
22 
23 # ifdef _WIN32
24 #  define PR_CALLBACK __stdcall
25 # else
26 #  define PR_CALLBACK
27 # endif
28 // custom error checking
29 
30 extern GLenum BuildGLError;
31 extern void BuildGLErrorCheck(void);
32 
33 
34 //////// dynamic/static API wrapping ////////
35 
36 #if !defined RENDERTYPESDL && defined _WIN32 && defined DYNAMIC_GL
37 typedef HGLRC (WINAPI * bwglCreateContextProcPtr)(HDC);
38 extern bwglCreateContextProcPtr bwglCreateContext;
39 #define wglCreateContext bwglCreateContext
40 typedef BOOL (WINAPI * bwglDeleteContextProcPtr)(HGLRC);
41 extern bwglDeleteContextProcPtr bwglDeleteContext;
42 #define wglDeleteContext bwglDeleteContext
43 typedef PROC (WINAPI * bwglGetProcAddressProcPtr)(LPCSTR);
44 extern bwglGetProcAddressProcPtr bwglGetProcAddress;
45 #define wglGetProcAddress bwglGetProcAddress
46 typedef BOOL (WINAPI * bwglMakeCurrentProcPtr)(HDC,HGLRC);
47 extern bwglMakeCurrentProcPtr bwglMakeCurrent;
48 #define wglMakeCurrent bwglMakeCurrent
49 
50 typedef int32_t (WINAPI * bwglChoosePixelFormatProcPtr)(HDC,CONST PIXELFORMATDESCRIPTOR*);
51 extern bwglChoosePixelFormatProcPtr bwglChoosePixelFormat;
52 #define wglChoosePixelFormat bwglChoosePixelFormat
53 typedef int32_t (WINAPI * bwglDescribePixelFormatProcPtr)(HDC,int32_t,UINT,LPPIXELFORMATDESCRIPTOR);
54 extern bwglDescribePixelFormatProcPtr bwglDescribePixelFormat;
55 #define wglDescribePixelFormat bwglDescribePixelFormat
56 typedef int32_t (WINAPI * bwglGetPixelFormatProcPtr)(HDC);
57 extern bwglGetPixelFormatProcPtr bwglGetPixelFormat;
58 #define wglGetPixelFormat bwglGetPixelFormat
59 typedef BOOL (WINAPI * bwglSetPixelFormatProcPtr)(HDC,int32_t,const PIXELFORMATDESCRIPTOR*);
60 extern bwglSetPixelFormatProcPtr bwglSetPixelFormat;
61 #define wglSetPixelFormat bwglSetPixelFormat
62 #endif
63 
64 #if defined DYNAMIC_GLU
65 
66 // GLU
67 #if defined __clang__ && defined __APPLE__
68 // XXX: OS X 10.9 deprecated GLUtesselator.
69 #pragma clang diagnostic push
70 #pragma clang diagnostic ignored "-Wdeprecated-declarations"
71 #endif
72 
73 typedef void             (APIENTRY * bgluTessBeginContourProcPtr)(GLUtesselator* tess);
74 extern bgluTessBeginContourProcPtr bgluTessBeginContour;
75 typedef void             (APIENTRY * bgluTessBeginPolygonProcPtr)(GLUtesselator* tess, GLvoid* data);
76 extern bgluTessBeginPolygonProcPtr bgluTessBeginPolygon;
77 typedef void             (APIENTRY * bgluTessCallbackProcPtr)(GLUtesselator* tess, GLenum which, void (PR_CALLBACK CallBackFuncProcPtr)());
78 extern bgluTessCallbackProcPtr bgluTessCallback;
79 typedef void             (APIENTRY * bgluTessEndContourProcPtr)(GLUtesselator* tess);
80 extern bgluTessEndContourProcPtr bgluTessEndContour;
81 typedef void             (APIENTRY * bgluTessEndPolygonProcPtr)(GLUtesselator* tess);
82 extern bgluTessEndPolygonProcPtr bgluTessEndPolygon;
83 typedef void             (APIENTRY * bgluTessNormalProcPtr)(GLUtesselator* tess, GLdouble valueX, GLdouble valueY, GLdouble valueZ);
84 extern bgluTessNormalProcPtr bgluTessNormal;
85 typedef void             (APIENTRY * bgluTessPropertyProcPtr)(GLUtesselator* tess, GLenum which, GLdouble data);
86 extern bgluTessPropertyProcPtr bgluTessProperty;
87 typedef void             (APIENTRY * bgluTessVertexProcPtr)(GLUtesselator* tess, GLdouble *location, GLvoid* data);
88 extern bgluTessVertexProcPtr bgluTessVertex;
89 typedef GLUtesselator*   (APIENTRY * bgluNewTessProcPtr)(void);
90 extern bgluNewTessProcPtr bgluNewTess;
91 typedef void             (APIENTRY * bgluDeleteTessProcPtr)(GLUtesselator* tess);
92 extern bgluDeleteTessProcPtr bgluDeleteTess;
93 
94 #if defined __clang__ && defined __APPLE__
95 #pragma clang diagnostic pop
96 #endif
97 
98 typedef void             (APIENTRY * bgluPerspectiveProcPtr)(GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar);
99 extern bgluPerspectiveProcPtr bgluPerspective;
100 
101 typedef const GLubyte *  (APIENTRY * bgluErrorStringProcPtr)(GLenum error);
102 extern bgluErrorStringProcPtr bgluErrorString;
103 
104 typedef GLint            (APIENTRY * bgluProjectProcPtr)(GLdouble objX, GLdouble objY, GLdouble objZ, const GLdouble *model, const GLdouble *proj, const GLint	*view, GLdouble* winX, GLdouble* winY, GLdouble* winZ);
105 extern bgluProjectProcPtr bgluProject;
106 typedef GLint            (APIENTRY * bgluUnProjectProcPtr)(GLdouble winX, GLdouble winY, GLdouble winZ, const GLdouble * model, const GLdouble * proj, const GLint * view, GLdouble* objX, GLdouble* objY, GLdouble* objZ);
107 extern bgluUnProjectProcPtr bgluUnProject;
108 
109 typedef void             (APIENTRY * bgluLookAtProcPtr)(GLdouble eyeX, GLdouble eyeY, GLdouble eyeZ, GLdouble centerX, GLdouble centerY, GLdouble centerZ, GLdouble upX, GLdouble upY, GLdouble upZ);
110 extern bgluLookAtProcPtr bgluLookAt;
111 
112 #else
113 
114 #define bgluTessBeginContour gluTessBeginContour
115 #define bgluTessBeginPolygon gluTessBeginPolygon
116 #define bgluTessCallback gluTessCallback
117 #define bgluTessEndContour gluTessEndContour
118 #define bgluTessEndPolygon gluTessEndPolygon
119 #define bgluTessNormal gluTessNormal
120 #define bgluTessProperty gluTessProperty
121 #define bgluTessVertex gluTessVertex
122 #define bgluNewTess gluNewTess
123 #define bgluDeleteTess gluDeleteTess
124 
125 #define bgluPerspective gluPerspective
126 
127 #define bgluErrorString gluErrorString
128 
129 #define bgluProject gluProject
130 #define bgluUnProject gluUnProject
131 
132 #define bgluLookAt gluLookAt
133 
134 #endif
135 
136 
137 //////// glGenTextures/glDeleteTextures debugging ////////
138 void texdbg_bglGenTextures(GLsizei n, GLuint *textures, const char *srcfn);
139 void texdbg_bglDeleteTextures(GLsizei n, const GLuint *textures, const char *srcfn);
140 
141 //#define DEBUG_TEXTURE_NAMES
142 
143 #if defined DEBUGGINGAIDS && defined DEBUG_TEXTURE_NAMES
144 # define glGenTextures(numtexs, texnamear) texdbg_bglGenTextures(numtexs, texnamear, __FILE__)
145 # define glDeleteTextures(numtexs, texnamear) texdbg_bglDeleteTextures(numtexs, texnamear, __FILE__)
146 #endif
147 
148 #endif //USE_OPENGL
149 
150 #if !defined RENDERTYPESDL && defined _WIN32 && defined DYNAMIC_GL
151 extern char *gldriver;
152 
153 int32_t loadwgl(const char *driver);
154 int32_t unloadwgl(void);
155 #endif
156 
157 #ifdef POLYMER
158 int32_t loadglulibrary(const char *driver);
159 int32_t unloadglulibrary(void);
160 #endif
161 
162 #endif
163