]> de.git.xonotic.org Git - xonotic/netradiant.git/blob - include/igl.h
transfer from internal tree r5311 branches/1.4-gpl
[xonotic/netradiant.git] / include / igl.h
1 /*\r
2 Copyright (C) 1999-2007 id Software, Inc. and contributors.\r
3 For a list of contributors, see the accompanying CONTRIBUTORS file.\r
4 \r
5 This file is part of GtkRadiant.\r
6 \r
7 GtkRadiant is free software; you can redistribute it and/or modify\r
8 it under the terms of the GNU General Public License as published by\r
9 the Free Software Foundation; either version 2 of the License, or\r
10 (at your option) any later version.\r
11 \r
12 GtkRadiant is distributed in the hope that it will be useful,\r
13 but WITHOUT ANY WARRANTY; without even the implied warranty of\r
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
15 GNU General Public License for more details.\r
16 \r
17 You should have received a copy of the GNU General Public License\r
18 along with GtkRadiant; if not, write to the Free Software\r
19 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA\r
20 */\r
21 \r
22 //-----------------------------------------------------------------------------\r
23 //\r
24 //\r
25 // DESCRIPTION:\r
26 // all purpose OpenGL interface for Q3Radiant plugins\r
27 //\r
28 \r
29 #ifndef __IGL_H__\r
30 #define __IGL_H__\r
31 \r
32 #if defined (__linux__) || defined (__APPLE__)\r
33 #include <GL/glx.h>\r
34 #endif\r
35 \r
36 // we use these classes to let plugins draw inside the Radiant windows\r
37 // 2D window like YZ XZ XY\r
38 class IGL2DWindow\r
39 {\r
40 public:\r
41         // Increment the number of references to this object\r
42         virtual void IncRef () = 0;\r
43         // Decrement the reference count\r
44         virtual void DecRef () = 0;\r
45         virtual void Draw2D( VIEWTYPE vt ) = 0;\r
46 };\r
47 \r
48 // 3D window\r
49 class IGL3DWindow\r
50 {\r
51 public:\r
52   // Increment the number of references to this object\r
53   virtual void IncRef () = 0;\r
54   // Decrement the reference count\r
55   virtual void DecRef () = 0;\r
56   virtual void Draw3D() = 0;\r
57 };\r
58 \r
59 #define QGL_MAJOR "qgl"\r
60 \r
61 #include <GL/gl.h>\r
62 \r
63 typedef void (APIENTRY* PFN_QGLALPHAFUNC) (GLenum func, GLclampf ref);\r
64 typedef void (APIENTRY* PFN_QGLBEGIN) (GLenum);\r
65 typedef void (APIENTRY* PFN_QGLBINDTEXTURE) (GLenum target, GLuint texture);\r
66 typedef void (APIENTRY* PFN_QGLBLENDFUNC) (GLenum sfactor, GLenum dfactor);\r
67 typedef void (APIENTRY* PFN_QGLCALLLIST) (GLuint list);\r
68 typedef void (APIENTRY* PFN_QGLCALLLISTS) (GLsizei n, GLenum type, const GLvoid *lists);\r
69 typedef void (APIENTRY* PFN_QGLCLEAR) (GLbitfield mask);\r
70 typedef void (APIENTRY* PFN_QGLCLEARCOLOR) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);\r
71 typedef void (APIENTRY* PFN_QGLCLEARDEPTH) (GLclampd depth);\r
72 typedef void (APIENTRY* PFN_QGLCOLOR3F) (GLfloat red, GLfloat green, GLfloat blue);\r
73 typedef void (APIENTRY* PFN_QGLCOLOR3FV) (const GLfloat *v);\r
74 typedef void (APIENTRY* PFN_QGLCOLOR4F) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);\r
75 typedef void (APIENTRY* PFN_QGLCOLOR4FV) (const GLfloat *v);\r
76 typedef void (APIENTRY* PFN_QGLCOLOR4UBV) (const GLubyte *v);\r
77 typedef void (APIENTRY* PFN_QGLCOLORPOINTER) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);\r
78 typedef void (APIENTRY* PFN_QGLCULLFACE) (GLenum mode);\r
79 typedef void (APIENTRY* PFN_QGLDELETELISTS) (GLuint list, GLsizei range);\r
80 typedef void (APIENTRY* PFN_QGLDELETETEXTURES)  (GLsizei n, const GLuint *textures);\r
81 typedef void (APIENTRY* PFN_QGLDEPTHFUNC) (GLenum func);\r
82 typedef void (APIENTRY* PFN_QGLDEPTHMASK) (GLboolean flag);\r
83 typedef void (APIENTRY* PFN_QGLDISABLE) (GLenum cap);\r
84 typedef void (APIENTRY* PFN_QGLDISABLECLIENTSTATE) (GLenum array);\r
85 typedef void (APIENTRY* PFN_QGLDRAWELEMENTS) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices);\r
86 typedef void (APIENTRY* PFN_QGLENABLE) (GLenum cap);\r
87 typedef void (APIENTRY* PFN_QGLENABLECLIENTSTATE) (GLenum array);\r
88 typedef void (APIENTRY* PFN_QGLEND) ();\r
89 typedef void (APIENTRY* PFN_QGLENDLIST) ();\r
90 typedef void (APIENTRY* PFN_QGLFOGF) (GLenum pname, GLfloat param);\r
91 typedef void (APIENTRY* PFN_QGLFOGFV) (GLenum pname, const GLfloat *params);\r
92 typedef void (APIENTRY* PFN_QGLFOGFI) (GLenum pname, GLint param);\r
93 typedef GLuint (APIENTRY* PFN_QGLGENLISTS) (GLsizei range);\r
94 typedef void (APIENTRY *PFN_QGLGENTEXTURES) (GLsizei n, GLuint *textures);\r
95 typedef void (APIENTRY* PFN_QGLGETDOUBLEV) (GLenum pname, GLdouble *params);\r
96 typedef void (APIENTRY* PFN_QGLHINT) (GLenum target, GLenum mode);\r
97 typedef void (APIENTRY* PFN_QGLGETINTEGERV) (GLenum pname, GLint *params);\r
98 typedef void (APIENTRY* PFN_QGLLIGHTFV) (GLenum light, GLenum pname, const GLfloat *params);\r
99 typedef void (APIENTRY* PFN_QGLLINEWIDTH) (GLfloat size);\r
100 typedef void (APIENTRY* PFN_QGLLINESTIPPLE) (GLint factor, GLushort pattern);\r
101 typedef void (APIENTRY* PFN_QGLLINEWIDTH)       (GLfloat size);\r
102 typedef void (APIENTRY* PFN_QGLLISTBASE) (GLuint base);\r
103 typedef void (APIENTRY* PFN_QGLLOADIDENTITY) ();\r
104 typedef void (APIENTRY* PFN_QGLMATERIALF) (GLenum face, GLenum pname, GLfloat param);\r
105 typedef void (APIENTRY* PFN_QGLMATERIALFV) (GLenum face, GLenum pname, const GLfloat *params);\r
106 typedef void (APIENTRY* PFN_QGLMATRIXMODE) (GLenum mode);\r
107 typedef void (APIENTRY* PFN_QGLMULTMATRIXF)    (const GLfloat *m);\r
108 typedef void (APIENTRY* PFN_QGLNEWLIST) (GLuint list, GLenum mode);\r
109 typedef void (APIENTRY* PFN_QGLNORMAL3F) (GLfloat nx, GLfloat ny, GLfloat nz);\r
110 typedef void (APIENTRY* PFN_QGLNORMAL3FV) (const GLfloat *n);\r
111 typedef void (APIENTRY* PFN_QGLNORMALPOINTER) (GLenum type, GLsizei stride, const GLvoid *pointer);\r
112 typedef void (APIENTRY* PFN_QGLORTHO) (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);\r
113 typedef void (APIENTRY* PFN_QGLPOINTSIZE) (GLfloat size);\r
114 typedef void (APIENTRY* PFN_QGLPOLYGONMODE) (GLenum face, GLenum mode);\r
115 typedef void (APIENTRY* PFN_QGLPOPATTRIB) ();\r
116 typedef void (APIENTRY* PFN_QGLPOPMATRIX) ();\r
117 typedef void (APIENTRY* PFN_QGLPUSHATTRIB) (GLbitfield mask);\r
118 typedef void (APIENTRY* PFN_QGLPUSHMATRIX) ();\r
119 typedef void (APIENTRY* PFN_QGLRASTERPOS3FV) (const GLfloat *v);\r
120 typedef void (APIENTRY* PFN_QGLROTATED) (GLdouble angle, GLdouble x, GLdouble y, GLdouble z);\r
121 typedef void (APIENTRY* PFN_QGLROTATEF) (GLfloat angle, GLfloat x, GLfloat y, GLfloat z);\r
122 typedef void (APIENTRY* PFN_QGLSCALEF)                  (GLfloat x, GLfloat y, GLfloat z);\r
123 typedef void (APIENTRY* PFN_QGLSCISSOR) (GLint x, GLint y, GLsizei width, GLsizei height);\r
124 typedef void (APIENTRY* PFN_QGLSCALEF) (GLfloat x, GLfloat y, GLfloat z);\r
125 typedef void (APIENTRY* PFN_QGLSHADEMODEL) (GLenum mode);\r
126 typedef void (APIENTRY* PFN_QGLTEXCOORD2F) (GLfloat s, GLfloat t);\r
127 typedef void (APIENTRY* PFN_QGLTEXCOORD2FV) (const GLfloat *v);\r
128 typedef void (APIENTRY* PFN_QGLTEXCOORDPOINTER) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);\r
129 typedef void (APIENTRY* PFN_QGLTEXENVF) (GLenum target, GLenum pname, GLfloat param);\r
130 typedef void (APIENTRY* PFN_QGLTEXGENF) (GLenum coord, GLenum pname, GLfloat param);\r
131 typedef void (APIENTRY* PFN_QGLTEXIMAGE1D) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels);\r
132 typedef void (APIENTRY* PFN_QGLTEXIMAGE2D) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels);\r
133 typedef void (APIENTRY* PFN_QGLTEXPARAMETERF) (GLenum target, GLenum pname, GLfloat param);\r
134 typedef void (APIENTRY* PFN_QGLTEXPARAMETERFV) (GLenum target, GLenum pname, const GLfloat *params);\r
135 typedef void (APIENTRY* PFN_QGLTEXPARAMETERI) (GLenum target, GLenum pname, GLint param);\r
136 typedef void (APIENTRY* PFN_QGLTEXPARAMETERIV) (GLenum target, GLenum pname, const GLint *params);\r
137 typedef void (APIENTRY* PFN_QGLTEXSUBIMAGE1D) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels);\r
138 typedef void (APIENTRY* PFN_QGLTEXSUBIMAGE2D) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);\r
139 typedef void (APIENTRY* PFN_QGLTRANSLATED) (GLdouble x, GLdouble y, GLdouble z);\r
140 typedef void (APIENTRY* PFN_QGLTRANSLATEF) (GLfloat x, GLfloat y, GLfloat z);\r
141 typedef void (APIENTRY* PFN_QGLVERTEX2F) (GLfloat x, GLfloat y);\r
142 typedef void (APIENTRY* PFN_QGLVERTEX3F) (GLfloat x, GLfloat y, GLfloat z);\r
143 typedef void (APIENTRY* PFN_QGLVERTEX3FV) (const GLfloat *v);\r
144 typedef void (APIENTRY* PFN_QGLVERTEXPOINTER) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);\r
145 typedef void (APIENTRY* PFN_QGLVIEWPORT) (GLint x, GLint y, GLsizei width, GLsizei height);\r
146 \r
147 typedef void (WINAPI* PFN_QE_CHECKOPENGLFORERRORS)      ();\r
148 \r
149 // glu stuff\r
150 // TTimo: NOTE: relying on glu might not be such a good idea. On many systems, the GLU lib is outdated, misversioned etc.\r
151 typedef void (APIENTRY * PFN_QGLUPERSPECTIVE) (GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar);\r
152 typedef void (APIENTRY * PFN_QGLULOOKAT) (GLdouble eyex, GLdouble eyey, GLdouble eyez,\r
153                                           GLdouble centerx, GLdouble centery, GLdouble centerz,\r
154                                           GLdouble upx, GLdouble upy, GLdouble upz);\r
155 //++timo gluErrorString is defined but not exposed in the IGL interface\r
156 \r
157 \r
158 // plugins drawing inside the GL windows\r
159 //++timo TODO: add hooking into other windows (Z and .. texture??)\r
160 //+timo NOTE: this could be moved to the messaging system instead of having a dedicated interface <- yet I don't know how\r
161 typedef void (WINAPI* PFN_QERAPP_HOOKGL2DWINDOW) (IGL2DWindow *);\r
162 typedef void (WINAPI* PFN_QERAPP_UNHOOKGL2DWINDOW) (IGL2DWindow *);\r
163 typedef void (WINAPI* PFN_QERAPP_HOOKGL3DWINDOW) (IGL3DWindow *);\r
164 typedef void (WINAPI* PFN_QERAPP_UNHOOKGL3DWINDOW) (IGL3DWindow *);\r
165 \r
166 struct _QERQglTable\r
167 {\r
168   //++timo do we really wanna play with versions ?\r
169   //    float m_fVersion;\r
170   int m_nSize;\r
171   PFN_QGLALPHAFUNC              m_pfn_qglAlphaFunc;\r
172   PFN_QGLBEGIN                  m_pfn_qglBegin;\r
173   PFN_QGLBINDTEXTURE            m_pfn_qglBindTexture;\r
174   PFN_QGLBLENDFUNC              m_pfn_qglBlendFunc;\r
175   PFN_QGLCALLLIST                       m_pfn_qglCallList;\r
176   PFN_QGLCLEAR                  m_pfn_qglClear;\r
177   PFN_QGLCLEARCOLOR             m_pfn_qglClearColor;\r
178   PFN_QGLCALLLISTS              m_pfn_qglCallLists;\r
179   PFN_QGLCLEARDEPTH             m_pfn_qglClearDepth;\r
180   PFN_QGLCOLOR3F                        m_pfn_qglColor3f;\r
181   PFN_QGLCOLOR3FV         m_pfn_qglColor3fv;\r
182   PFN_QGLCOLOR4F                        m_pfn_qglColor4f;\r
183   PFN_QGLCOLOR4FV         m_pfn_qglColor4fv;\r
184   PFN_QGLCOLOR4UBV        m_pfn_qglColor4ubv;   // ydnar\r
185   PFN_QGLCOLORPOINTER     m_pfn_qglColorPointer;\r
186   PFN_QGLCULLFACE                       m_pfn_qglCullFace;\r
187   PFN_QGLDELETELISTS            m_pfn_qglDeleteLists;\r
188   PFN_QGLDELETETEXTURES  m_pfn_qglDeleteTextures;\r
189   PFN_QGLDEPTHFUNC        m_pfn_qglDepthFunc;\r
190   PFN_QGLDEPTHMASK        m_pfn_qglDepthMask;\r
191   PFN_QGLDISABLE                        m_pfn_qglDisable;\r
192   PFN_QGLDISABLECLIENTSTATE m_pfn_qglDisableClientState;\r
193   PFN_QGLDRAWELEMENTS                   m_pfn_qglDrawElements;\r
194   PFN_QGLENABLE                 m_pfn_qglEnable;\r
195   PFN_QGLENABLECLIENTSTATE  m_pfn_qglEnableClientState;\r
196   PFN_QGLEND                            m_pfn_qglEnd;\r
197   PFN_QGLENDLIST                        m_pfn_qglEndList;\r
198   PFN_QGLFOGF              m_pfn_qglFogf;\r
199   PFN_QGLFOGFV             m_pfn_qglFogfv;\r
200   PFN_QGLFOGFI             m_pfn_qglFogi;\r
201   PFN_QGLGENLISTS                       m_pfn_qglGenLists;\r
202   PFN_QGLGENTEXTURES  m_pfn_qglGenTextures;\r
203   PFN_QGLGETDOUBLEV                     m_pfn_qglGetDoublev;\r
204   PFN_QGLGETINTEGERV      m_pfn_qglGetIntegerv;\r
205   PFN_QGLHINT             m_pfn_qglHint;\r
206   PFN_QGLLIGHTFV          m_pfn_qglLightfv;\r
207   PFN_QGLLINESTIPPLE      m_pfn_qglLineStipple;\r
208   PFN_QGLLINEWIDTH        m_pfn_qglLineWidth;\r
209   PFN_QGLLISTBASE                       m_pfn_qglListBase;\r
210   PFN_QGLLOADIDENTITY           m_pfn_qglLoadIdentity;\r
211   PFN_QGLMATERIALF              m_pfn_qglMaterialf;\r
212   PFN_QGLMATERIALFV       m_pfn_qglMaterialfv;\r
213   PFN_QGLMATRIXMODE             m_pfn_qglMatrixMode;\r
214   PFN_QGLMULTMATRIXF  m_pfn_qglMultMatrixf;\r
215   PFN_QGLNEWLIST                        m_pfn_qglNewList;\r
216   PFN_QGLNORMAL3F                       m_pfn_qglNormal3f;\r
217   PFN_QGLNORMAL3FV                      m_pfn_qglNormal3fv;\r
218         PFN_QGLNORMALPOINTER            m_pfn_qglNormalPointer;\r
219   PFN_QGLORTHO                  m_pfn_qglOrtho;\r
220   PFN_QGLPOINTSIZE              m_pfn_qglPointSize;\r
221   PFN_QGLPOLYGONMODE            m_pfn_qglPolygonMode;\r
222   PFN_QGLPOPATTRIB              m_pfn_qglPopAttrib;\r
223   PFN_QGLPOPMATRIX              m_pfn_qglPopMatrix;\r
224   PFN_QGLPUSHATTRIB             m_pfn_qglPushAttrib;\r
225   PFN_QGLPUSHMATRIX             m_pfn_qglPushMatrix;\r
226         PFN_QGLRASTERPOS3FV     m_pfn_qglRasterPos3fv;\r
227   PFN_QGLROTATED                        m_pfn_qglRotated;\r
228   PFN_QGLROTATEF                        m_pfn_qglRotatef;\r
229   PFN_QGLSCALEF                 m_pfn_qglScalef;\r
230   PFN_QGLSCISSOR        m_pfn_qglScissor;\r
231   PFN_QGLSHADEMODEL             m_pfn_qglShadeModel;\r
232   PFN_QGLTEXCOORD2F             m_pfn_qglTexCoord2f;\r
233   PFN_QGLTEXCOORD2FV      m_pfn_qglTexCoord2fv;\r
234         PFN_QGLTEXCOORDPOINTER          m_pfn_qglTexCoordPointer;\r
235   PFN_QGLTEXENVF                        m_pfn_qglTexEnvf;\r
236   PFN_QGLTEXGENF                        m_pfn_qglTexGenf;\r
237   PFN_QGLTEXIMAGE1D     m_pfn_qglTexImage1D;\r
238   PFN_QGLTEXIMAGE2D     m_pfn_qglTexImage2D;\r
239   PFN_QGLTEXPARAMETERF  m_pfn_qglTexParameterf;\r
240   PFN_QGLTEXPARAMETERFV m_pfn_qglTexParameterfv;\r
241   PFN_QGLTEXPARAMETERI  m_pfn_qglTexParameteri;\r
242   PFN_QGLTEXPARAMETERIV m_pfn_qglTexParameteriv;\r
243   PFN_QGLTEXSUBIMAGE1D  m_pfn_qglTexSubImage1D;\r
244   PFN_QGLTEXSUBIMAGE2D  m_pfn_qglTexSubImage2D;\r
245   PFN_QGLTRANSLATED             m_pfn_qglTranslated;\r
246   PFN_QGLTRANSLATEF             m_pfn_qglTranslatef;\r
247   PFN_QGLVERTEX2F                       m_pfn_qglVertex2f;\r
248   PFN_QGLVERTEX3F                       m_pfn_qglVertex3f;\r
249   PFN_QGLVERTEX3FV        m_pfn_qglVertex3fv;\r
250         PFN_QGLVERTEXPOINTER            m_pfn_qglVertexPointer;\r
251   PFN_QGLVIEWPORT                       m_pfn_qglViewport;\r
252 \r
253   PFN_QE_CHECKOPENGLFORERRORS   m_pfn_QE_CheckOpenGLForErrors;\r
254 \r
255   // glu stuff\r
256   PFN_QGLUPERSPECTIVE                   m_pfn_qgluPerspective;\r
257   PFN_QGLULOOKAT                                m_pfn_qgluLookAt;\r
258 \r
259   // plugin entities drawing inside Radiant windows\r
260   PFN_QERAPP_HOOKGL2DWINDOW     m_pfnHookGL2DWindow;\r
261   PFN_QERAPP_UNHOOKGL2DWINDOW   m_pfnUnHookGL2DWindow;\r
262   PFN_QERAPP_HOOKGL3DWINDOW m_pfnHookGL3DWindow;\r
263   PFN_QERAPP_UNHOOKGL3DWINDOW m_pfnUnHookGL3DWindow;\r
264 };\r
265 \r
266 #endif\r