X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=include%2Figl.h;h=db857ec51da7c91f23704fc0db1956737d761e76;hb=830125fad042fad35dc029b6eb57c8156ad7e176;hp=99e4141fbf94e722610868b342e94d69cf94ccf7;hpb=80378101101ca1762bbf5638a9e3566893096d8a;p=xonotic%2Fnetradiant.git diff --git a/include/igl.h b/include/igl.h index 99e4141f..db857ec5 100644 --- a/include/igl.h +++ b/include/igl.h @@ -1,266 +1,268 @@ -/* -Copyright (C) 1999-2007 id Software, Inc. and contributors. -For a list of contributors, see the accompanying CONTRIBUTORS file. - -This file is part of GtkRadiant. - -GtkRadiant is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -GtkRadiant is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GtkRadiant; if not, write to the Free Software -Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -//----------------------------------------------------------------------------- -// -// -// DESCRIPTION: -// all purpose OpenGL interface for Q3Radiant plugins -// - -#ifndef __IGL_H__ -#define __IGL_H__ - -#if defined (__linux__) || defined (__APPLE__) -#include -#endif - -// we use these classes to let plugins draw inside the Radiant windows -// 2D window like YZ XZ XY -class IGL2DWindow -{ -public: - // Increment the number of references to this object - virtual void IncRef () = 0; - // Decrement the reference count - virtual void DecRef () = 0; - virtual void Draw2D( VIEWTYPE vt ) = 0; -}; - -// 3D window -class IGL3DWindow -{ -public: - // Increment the number of references to this object - virtual void IncRef () = 0; - // Decrement the reference count - virtual void DecRef () = 0; - virtual void Draw3D() = 0; -}; - -#define QGL_MAJOR "qgl" - -#include - -typedef void (APIENTRY* PFN_QGLALPHAFUNC) (GLenum func, GLclampf ref); -typedef void (APIENTRY* PFN_QGLBEGIN) (GLenum); -typedef void (APIENTRY* PFN_QGLBINDTEXTURE) (GLenum target, GLuint texture); -typedef void (APIENTRY* PFN_QGLBLENDFUNC) (GLenum sfactor, GLenum dfactor); -typedef void (APIENTRY* PFN_QGLCALLLIST) (GLuint list); -typedef void (APIENTRY* PFN_QGLCALLLISTS) (GLsizei n, GLenum type, const GLvoid *lists); -typedef void (APIENTRY* PFN_QGLCLEAR) (GLbitfield mask); -typedef void (APIENTRY* PFN_QGLCLEARCOLOR) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); -typedef void (APIENTRY* PFN_QGLCLEARDEPTH) (GLclampd depth); -typedef void (APIENTRY* PFN_QGLCOLOR3F) (GLfloat red, GLfloat green, GLfloat blue); -typedef void (APIENTRY* PFN_QGLCOLOR3FV) (const GLfloat *v); -typedef void (APIENTRY* PFN_QGLCOLOR4F) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -typedef void (APIENTRY* PFN_QGLCOLOR4FV) (const GLfloat *v); -typedef void (APIENTRY* PFN_QGLCOLOR4UBV) (const GLubyte *v); -typedef void (APIENTRY* PFN_QGLCOLORPOINTER) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRY* PFN_QGLCULLFACE) (GLenum mode); -typedef void (APIENTRY* PFN_QGLDELETELISTS) (GLuint list, GLsizei range); -typedef void (APIENTRY* PFN_QGLDELETETEXTURES) (GLsizei n, const GLuint *textures); -typedef void (APIENTRY* PFN_QGLDEPTHFUNC) (GLenum func); -typedef void (APIENTRY* PFN_QGLDEPTHMASK) (GLboolean flag); -typedef void (APIENTRY* PFN_QGLDISABLE) (GLenum cap); -typedef void (APIENTRY* PFN_QGLDISABLECLIENTSTATE) (GLenum array); -typedef void (APIENTRY* PFN_QGLDRAWELEMENTS) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices); -typedef void (APIENTRY* PFN_QGLENABLE) (GLenum cap); -typedef void (APIENTRY* PFN_QGLENABLECLIENTSTATE) (GLenum array); -typedef void (APIENTRY* PFN_QGLEND) (); -typedef void (APIENTRY* PFN_QGLENDLIST) (); -typedef void (APIENTRY* PFN_QGLFOGF) (GLenum pname, GLfloat param); -typedef void (APIENTRY* PFN_QGLFOGFV) (GLenum pname, const GLfloat *params); -typedef void (APIENTRY* PFN_QGLFOGFI) (GLenum pname, GLint param); -typedef GLuint (APIENTRY* PFN_QGLGENLISTS) (GLsizei range); -typedef void (APIENTRY *PFN_QGLGENTEXTURES) (GLsizei n, GLuint *textures); -typedef void (APIENTRY* PFN_QGLGETDOUBLEV) (GLenum pname, GLdouble *params); -typedef void (APIENTRY* PFN_QGLHINT) (GLenum target, GLenum mode); -typedef void (APIENTRY* PFN_QGLGETINTEGERV) (GLenum pname, GLint *params); -typedef void (APIENTRY* PFN_QGLLIGHTFV) (GLenum light, GLenum pname, const GLfloat *params); -typedef void (APIENTRY* PFN_QGLLINEWIDTH) (GLfloat size); -typedef void (APIENTRY* PFN_QGLLINESTIPPLE) (GLint factor, GLushort pattern); -typedef void (APIENTRY* PFN_QGLLINEWIDTH) (GLfloat size); -typedef void (APIENTRY* PFN_QGLLISTBASE) (GLuint base); -typedef void (APIENTRY* PFN_QGLLOADIDENTITY) (); -typedef void (APIENTRY* PFN_QGLMATERIALF) (GLenum face, GLenum pname, GLfloat param); -typedef void (APIENTRY* PFN_QGLMATERIALFV) (GLenum face, GLenum pname, const GLfloat *params); -typedef void (APIENTRY* PFN_QGLMATRIXMODE) (GLenum mode); -typedef void (APIENTRY* PFN_QGLMULTMATRIXF) (const GLfloat *m); -typedef void (APIENTRY* PFN_QGLNEWLIST) (GLuint list, GLenum mode); -typedef void (APIENTRY* PFN_QGLNORMAL3F) (GLfloat nx, GLfloat ny, GLfloat nz); -typedef void (APIENTRY* PFN_QGLNORMAL3FV) (const GLfloat *n); -typedef void (APIENTRY* PFN_QGLNORMALPOINTER) (GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRY* PFN_QGLORTHO) (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -typedef void (APIENTRY* PFN_QGLPOINTSIZE) (GLfloat size); -typedef void (APIENTRY* PFN_QGLPOLYGONMODE) (GLenum face, GLenum mode); -typedef void (APIENTRY* PFN_QGLPOPATTRIB) (); -typedef void (APIENTRY* PFN_QGLPOPMATRIX) (); -typedef void (APIENTRY* PFN_QGLPUSHATTRIB) (GLbitfield mask); -typedef void (APIENTRY* PFN_QGLPUSHMATRIX) (); -typedef void (APIENTRY* PFN_QGLRASTERPOS3FV) (const GLfloat *v); -typedef void (APIENTRY* PFN_QGLROTATED) (GLdouble angle, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRY* PFN_QGLROTATEF) (GLfloat angle, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRY* PFN_QGLSCALEF) (GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRY* PFN_QGLSCISSOR) (GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRY* PFN_QGLSCALEF) (GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRY* PFN_QGLSHADEMODEL) (GLenum mode); -typedef void (APIENTRY* PFN_QGLTEXCOORD2F) (GLfloat s, GLfloat t); -typedef void (APIENTRY* PFN_QGLTEXCOORD2FV) (const GLfloat *v); -typedef void (APIENTRY* PFN_QGLTEXCOORDPOINTER) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRY* PFN_QGLTEXENVF) (GLenum target, GLenum pname, GLfloat param); -typedef void (APIENTRY* PFN_QGLTEXGENF) (GLenum coord, GLenum pname, GLfloat param); -typedef void (APIENTRY* PFN_QGLTEXIMAGE1D) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRY* PFN_QGLTEXIMAGE2D) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRY* PFN_QGLTEXPARAMETERF) (GLenum target, GLenum pname, GLfloat param); -typedef void (APIENTRY* PFN_QGLTEXPARAMETERFV) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRY* PFN_QGLTEXPARAMETERI) (GLenum target, GLenum pname, GLint param); -typedef void (APIENTRY* PFN_QGLTEXPARAMETERIV) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRY* PFN_QGLTEXSUBIMAGE1D) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRY* PFN_QGLTEXSUBIMAGE2D) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRY* PFN_QGLTRANSLATED) (GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRY* PFN_QGLTRANSLATEF) (GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRY* PFN_QGLVERTEX2F) (GLfloat x, GLfloat y); -typedef void (APIENTRY* PFN_QGLVERTEX3F) (GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRY* PFN_QGLVERTEX3FV) (const GLfloat *v); -typedef void (APIENTRY* PFN_QGLVERTEXPOINTER) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRY* PFN_QGLVIEWPORT) (GLint x, GLint y, GLsizei width, GLsizei height); - -typedef void (WINAPI* PFN_QE_CHECKOPENGLFORERRORS) (); - -// glu stuff -// TTimo: NOTE: relying on glu might not be such a good idea. On many systems, the GLU lib is outdated, misversioned etc. -typedef void (APIENTRY * PFN_QGLUPERSPECTIVE) (GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar); -typedef void (APIENTRY * PFN_QGLULOOKAT) (GLdouble eyex, GLdouble eyey, GLdouble eyez, - GLdouble centerx, GLdouble centery, GLdouble centerz, - GLdouble upx, GLdouble upy, GLdouble upz); -//++timo gluErrorString is defined but not exposed in the IGL interface - - -// plugins drawing inside the GL windows -//++timo TODO: add hooking into other windows (Z and .. texture??) -//+timo NOTE: this could be moved to the messaging system instead of having a dedicated interface <- yet I don't know how -typedef void (WINAPI* PFN_QERAPP_HOOKGL2DWINDOW) (IGL2DWindow *); -typedef void (WINAPI* PFN_QERAPP_UNHOOKGL2DWINDOW) (IGL2DWindow *); -typedef void (WINAPI* PFN_QERAPP_HOOKGL3DWINDOW) (IGL3DWindow *); -typedef void (WINAPI* PFN_QERAPP_UNHOOKGL3DWINDOW) (IGL3DWindow *); - -struct _QERQglTable -{ - //++timo do we really wanna play with versions ? - // float m_fVersion; - int m_nSize; - PFN_QGLALPHAFUNC m_pfn_qglAlphaFunc; - PFN_QGLBEGIN m_pfn_qglBegin; - PFN_QGLBINDTEXTURE m_pfn_qglBindTexture; - PFN_QGLBLENDFUNC m_pfn_qglBlendFunc; - PFN_QGLCALLLIST m_pfn_qglCallList; - PFN_QGLCLEAR m_pfn_qglClear; - PFN_QGLCLEARCOLOR m_pfn_qglClearColor; - PFN_QGLCALLLISTS m_pfn_qglCallLists; - PFN_QGLCLEARDEPTH m_pfn_qglClearDepth; - PFN_QGLCOLOR3F m_pfn_qglColor3f; - PFN_QGLCOLOR3FV m_pfn_qglColor3fv; - PFN_QGLCOLOR4F m_pfn_qglColor4f; - PFN_QGLCOLOR4FV m_pfn_qglColor4fv; - PFN_QGLCOLOR4UBV m_pfn_qglColor4ubv; // ydnar - PFN_QGLCOLORPOINTER m_pfn_qglColorPointer; - PFN_QGLCULLFACE m_pfn_qglCullFace; - PFN_QGLDELETELISTS m_pfn_qglDeleteLists; - PFN_QGLDELETETEXTURES m_pfn_qglDeleteTextures; - PFN_QGLDEPTHFUNC m_pfn_qglDepthFunc; - PFN_QGLDEPTHMASK m_pfn_qglDepthMask; - PFN_QGLDISABLE m_pfn_qglDisable; - PFN_QGLDISABLECLIENTSTATE m_pfn_qglDisableClientState; - PFN_QGLDRAWELEMENTS m_pfn_qglDrawElements; - PFN_QGLENABLE m_pfn_qglEnable; - PFN_QGLENABLECLIENTSTATE m_pfn_qglEnableClientState; - PFN_QGLEND m_pfn_qglEnd; - PFN_QGLENDLIST m_pfn_qglEndList; - PFN_QGLFOGF m_pfn_qglFogf; - PFN_QGLFOGFV m_pfn_qglFogfv; - PFN_QGLFOGFI m_pfn_qglFogi; - PFN_QGLGENLISTS m_pfn_qglGenLists; - PFN_QGLGENTEXTURES m_pfn_qglGenTextures; - PFN_QGLGETDOUBLEV m_pfn_qglGetDoublev; - PFN_QGLGETINTEGERV m_pfn_qglGetIntegerv; - PFN_QGLHINT m_pfn_qglHint; - PFN_QGLLIGHTFV m_pfn_qglLightfv; - PFN_QGLLINESTIPPLE m_pfn_qglLineStipple; - PFN_QGLLINEWIDTH m_pfn_qglLineWidth; - PFN_QGLLISTBASE m_pfn_qglListBase; - PFN_QGLLOADIDENTITY m_pfn_qglLoadIdentity; - PFN_QGLMATERIALF m_pfn_qglMaterialf; - PFN_QGLMATERIALFV m_pfn_qglMaterialfv; - PFN_QGLMATRIXMODE m_pfn_qglMatrixMode; - PFN_QGLMULTMATRIXF m_pfn_qglMultMatrixf; - PFN_QGLNEWLIST m_pfn_qglNewList; - PFN_QGLNORMAL3F m_pfn_qglNormal3f; - PFN_QGLNORMAL3FV m_pfn_qglNormal3fv; - PFN_QGLNORMALPOINTER m_pfn_qglNormalPointer; - PFN_QGLORTHO m_pfn_qglOrtho; - PFN_QGLPOINTSIZE m_pfn_qglPointSize; - PFN_QGLPOLYGONMODE m_pfn_qglPolygonMode; - PFN_QGLPOPATTRIB m_pfn_qglPopAttrib; - PFN_QGLPOPMATRIX m_pfn_qglPopMatrix; - PFN_QGLPUSHATTRIB m_pfn_qglPushAttrib; - PFN_QGLPUSHMATRIX m_pfn_qglPushMatrix; - PFN_QGLRASTERPOS3FV m_pfn_qglRasterPos3fv; - PFN_QGLROTATED m_pfn_qglRotated; - PFN_QGLROTATEF m_pfn_qglRotatef; - PFN_QGLSCALEF m_pfn_qglScalef; - PFN_QGLSCISSOR m_pfn_qglScissor; - PFN_QGLSHADEMODEL m_pfn_qglShadeModel; - PFN_QGLTEXCOORD2F m_pfn_qglTexCoord2f; - PFN_QGLTEXCOORD2FV m_pfn_qglTexCoord2fv; - PFN_QGLTEXCOORDPOINTER m_pfn_qglTexCoordPointer; - PFN_QGLTEXENVF m_pfn_qglTexEnvf; - PFN_QGLTEXGENF m_pfn_qglTexGenf; - PFN_QGLTEXIMAGE1D m_pfn_qglTexImage1D; - PFN_QGLTEXIMAGE2D m_pfn_qglTexImage2D; - PFN_QGLTEXPARAMETERF m_pfn_qglTexParameterf; - PFN_QGLTEXPARAMETERFV m_pfn_qglTexParameterfv; - PFN_QGLTEXPARAMETERI m_pfn_qglTexParameteri; - PFN_QGLTEXPARAMETERIV m_pfn_qglTexParameteriv; - PFN_QGLTEXSUBIMAGE1D m_pfn_qglTexSubImage1D; - PFN_QGLTEXSUBIMAGE2D m_pfn_qglTexSubImage2D; - PFN_QGLTRANSLATED m_pfn_qglTranslated; - PFN_QGLTRANSLATEF m_pfn_qglTranslatef; - PFN_QGLVERTEX2F m_pfn_qglVertex2f; - PFN_QGLVERTEX3F m_pfn_qglVertex3f; - PFN_QGLVERTEX3FV m_pfn_qglVertex3fv; - PFN_QGLVERTEXPOINTER m_pfn_qglVertexPointer; - PFN_QGLVIEWPORT m_pfn_qglViewport; - - PFN_QE_CHECKOPENGLFORERRORS m_pfn_QE_CheckOpenGLForErrors; - - // glu stuff - PFN_QGLUPERSPECTIVE m_pfn_qgluPerspective; - PFN_QGLULOOKAT m_pfn_qgluLookAt; - - // plugin entities drawing inside Radiant windows - PFN_QERAPP_HOOKGL2DWINDOW m_pfnHookGL2DWindow; - PFN_QERAPP_UNHOOKGL2DWINDOW m_pfnUnHookGL2DWindow; - PFN_QERAPP_HOOKGL3DWINDOW m_pfnHookGL3DWindow; - PFN_QERAPP_UNHOOKGL3DWINDOW m_pfnUnHookGL3DWindow; -}; - -#endif +/* + Copyright (C) 1999-2007 id Software, Inc. and contributors. + For a list of contributors, see the accompanying CONTRIBUTORS file. + + This file is part of GtkRadiant. + + GtkRadiant is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + GtkRadiant is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GtkRadiant; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +//----------------------------------------------------------------------------- +// +// +// DESCRIPTION: +// all purpose OpenGL interface for Q3Radiant plugins +// + +#ifndef __IGL_H__ +#define __IGL_H__ + +#if defined ( __linux__ ) || defined ( __APPLE__ ) +#include +#endif + +// we use these classes to let plugins draw inside the Radiant windows +// 2D window like YZ XZ XY +class IGL2DWindow +{ +public: +virtual ~IGL2DWindow() { } +// Increment the number of references to this object +virtual void IncRef() = 0; +// Decrement the reference count +virtual void DecRef() = 0; +virtual void Draw2D( VIEWTYPE vt ) = 0; +}; + +// 3D window +class IGL3DWindow +{ +public: +virtual ~IGL3DWindow() { } +// Increment the number of references to this object +virtual void IncRef() = 0; +// Decrement the reference count +virtual void DecRef() = 0; +virtual void Draw3D() = 0; +}; + +#define QGL_MAJOR "qgl" + +#include + +typedef void ( APIENTRY * PFN_QGLALPHAFUNC )( GLenum func, GLclampf ref ); +typedef void ( APIENTRY * PFN_QGLBEGIN )( GLenum ); +typedef void ( APIENTRY * PFN_QGLBINDTEXTURE )( GLenum target, GLuint texture ); +typedef void ( APIENTRY * PFN_QGLBLENDFUNC )( GLenum sfactor, GLenum dfactor ); +typedef void ( APIENTRY * PFN_QGLCALLLIST )( GLuint list ); +typedef void ( APIENTRY * PFN_QGLCALLLISTS )( GLsizei n, GLenum type, const GLvoid *lists ); +typedef void ( APIENTRY * PFN_QGLCLEAR )( GLbitfield mask ); +typedef void ( APIENTRY * PFN_QGLCLEARCOLOR )( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha ); +typedef void ( APIENTRY * PFN_QGLCLEARDEPTH )( GLclampd depth ); +typedef void ( APIENTRY * PFN_QGLCOLOR3F )( GLfloat red, GLfloat green, GLfloat blue ); +typedef void ( APIENTRY * PFN_QGLCOLOR3FV )( const GLfloat *v ); +typedef void ( APIENTRY * PFN_QGLCOLOR4F )( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha ); +typedef void ( APIENTRY * PFN_QGLCOLOR4FV )( const GLfloat *v ); +typedef void ( APIENTRY * PFN_QGLCOLOR4UBV )( const GLubyte *v ); +typedef void ( APIENTRY * PFN_QGLCOLORPOINTER )( GLint size, GLenum type, GLsizei stride, const GLvoid *pointer ); +typedef void ( APIENTRY * PFN_QGLCULLFACE )( GLenum mode ); +typedef void ( APIENTRY * PFN_QGLDELETELISTS )( GLuint list, GLsizei range ); +typedef void ( APIENTRY * PFN_QGLDELETETEXTURES )( GLsizei n, const GLuint *textures ); +typedef void ( APIENTRY * PFN_QGLDEPTHFUNC )( GLenum func ); +typedef void ( APIENTRY * PFN_QGLDEPTHMASK )( GLboolean flag ); +typedef void ( APIENTRY * PFN_QGLDISABLE )( GLenum cap ); +typedef void ( APIENTRY * PFN_QGLDISABLECLIENTSTATE )( GLenum array ); +typedef void ( APIENTRY * PFN_QGLDRAWELEMENTS )( GLenum mode, GLsizei count, GLenum type, const GLvoid *indices ); +typedef void ( APIENTRY * PFN_QGLENABLE )( GLenum cap ); +typedef void ( APIENTRY * PFN_QGLENABLECLIENTSTATE )( GLenum array ); +typedef void ( APIENTRY * PFN_QGLEND )(); +typedef void ( APIENTRY * PFN_QGLENDLIST )(); +typedef void ( APIENTRY * PFN_QGLFOGF )( GLenum pname, GLfloat param ); +typedef void ( APIENTRY * PFN_QGLFOGFV )( GLenum pname, const GLfloat *params ); +typedef void ( APIENTRY * PFN_QGLFOGFI )( GLenum pname, GLint param ); +typedef GLuint ( APIENTRY * PFN_QGLGENLISTS )( GLsizei range ); +typedef void ( APIENTRY * PFN_QGLGENTEXTURES )( GLsizei n, GLuint *textures ); +typedef void ( APIENTRY * PFN_QGLGETDOUBLEV )( GLenum pname, GLdouble *params ); +typedef void ( APIENTRY * PFN_QGLHINT )( GLenum target, GLenum mode ); +typedef void ( APIENTRY * PFN_QGLGETINTEGERV )( GLenum pname, GLint *params ); +typedef void ( APIENTRY * PFN_QGLLIGHTFV )( GLenum light, GLenum pname, const GLfloat *params ); +typedef void ( APIENTRY * PFN_QGLLINEWIDTH )( GLfloat size ); +typedef void ( APIENTRY * PFN_QGLLINESTIPPLE )( GLint factor, GLushort pattern ); +typedef void ( APIENTRY * PFN_QGLLINEWIDTH )( GLfloat size ); +typedef void ( APIENTRY * PFN_QGLLISTBASE )( GLuint base ); +typedef void ( APIENTRY * PFN_QGLLOADIDENTITY )(); +typedef void ( APIENTRY * PFN_QGLMATERIALF )( GLenum face, GLenum pname, GLfloat param ); +typedef void ( APIENTRY * PFN_QGLMATERIALFV )( GLenum face, GLenum pname, const GLfloat *params ); +typedef void ( APIENTRY * PFN_QGLMATRIXMODE )( GLenum mode ); +typedef void ( APIENTRY * PFN_QGLMULTMATRIXF )( const GLfloat *m ); +typedef void ( APIENTRY * PFN_QGLNEWLIST )( GLuint list, GLenum mode ); +typedef void ( APIENTRY * PFN_QGLNORMAL3F )( GLfloat nx, GLfloat ny, GLfloat nz ); +typedef void ( APIENTRY * PFN_QGLNORMAL3FV )( const GLfloat *n ); +typedef void ( APIENTRY * PFN_QGLNORMALPOINTER )( GLenum type, GLsizei stride, const GLvoid *pointer ); +typedef void ( APIENTRY * PFN_QGLORTHO )( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar ); +typedef void ( APIENTRY * PFN_QGLPOINTSIZE )( GLfloat size ); +typedef void ( APIENTRY * PFN_QGLPOLYGONMODE )( GLenum face, GLenum mode ); +typedef void ( APIENTRY * PFN_QGLPOPATTRIB )(); +typedef void ( APIENTRY * PFN_QGLPOPMATRIX )(); +typedef void ( APIENTRY * PFN_QGLPUSHATTRIB )( GLbitfield mask ); +typedef void ( APIENTRY * PFN_QGLPUSHMATRIX )(); +typedef void ( APIENTRY * PFN_QGLRASTERPOS3FV )( const GLfloat *v ); +typedef void ( APIENTRY * PFN_QGLROTATED )( GLdouble angle, GLdouble x, GLdouble y, GLdouble z ); +typedef void ( APIENTRY * PFN_QGLROTATEF )( GLfloat angle, GLfloat x, GLfloat y, GLfloat z ); +typedef void ( APIENTRY * PFN_QGLSCALEF )( GLfloat x, GLfloat y, GLfloat z ); +typedef void ( APIENTRY * PFN_QGLSCISSOR )( GLint x, GLint y, GLsizei width, GLsizei height ); +typedef void ( APIENTRY * PFN_QGLSCALEF )( GLfloat x, GLfloat y, GLfloat z ); +typedef void ( APIENTRY * PFN_QGLSHADEMODEL )( GLenum mode ); +typedef void ( APIENTRY * PFN_QGLTEXCOORD2F )( GLfloat s, GLfloat t ); +typedef void ( APIENTRY * PFN_QGLTEXCOORD2FV )( const GLfloat *v ); +typedef void ( APIENTRY * PFN_QGLTEXCOORDPOINTER )( GLint size, GLenum type, GLsizei stride, const GLvoid *pointer ); +typedef void ( APIENTRY * PFN_QGLTEXENVF )( GLenum target, GLenum pname, GLfloat param ); +typedef void ( APIENTRY * PFN_QGLTEXGENF )( GLenum coord, GLenum pname, GLfloat param ); +typedef void ( APIENTRY * PFN_QGLTEXIMAGE1D )( GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels ); +typedef void ( APIENTRY * PFN_QGLTEXIMAGE2D )( GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels ); +typedef void ( APIENTRY * PFN_QGLTEXPARAMETERF )( GLenum target, GLenum pname, GLfloat param ); +typedef void ( APIENTRY * PFN_QGLTEXPARAMETERFV )( GLenum target, GLenum pname, const GLfloat *params ); +typedef void ( APIENTRY * PFN_QGLTEXPARAMETERI )( GLenum target, GLenum pname, GLint param ); +typedef void ( APIENTRY * PFN_QGLTEXPARAMETERIV )( GLenum target, GLenum pname, const GLint *params ); +typedef void ( APIENTRY * PFN_QGLTEXSUBIMAGE1D )( GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels ); +typedef void ( APIENTRY * PFN_QGLTEXSUBIMAGE2D )( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels ); +typedef void ( APIENTRY * PFN_QGLTRANSLATED )( GLdouble x, GLdouble y, GLdouble z ); +typedef void ( APIENTRY * PFN_QGLTRANSLATEF )( GLfloat x, GLfloat y, GLfloat z ); +typedef void ( APIENTRY * PFN_QGLVERTEX2F )( GLfloat x, GLfloat y ); +typedef void ( APIENTRY * PFN_QGLVERTEX3F )( GLfloat x, GLfloat y, GLfloat z ); +typedef void ( APIENTRY * PFN_QGLVERTEX3FV )( const GLfloat *v ); +typedef void ( APIENTRY * PFN_QGLVERTEXPOINTER )( GLint size, GLenum type, GLsizei stride, const GLvoid *pointer ); +typedef void ( APIENTRY * PFN_QGLVIEWPORT )( GLint x, GLint y, GLsizei width, GLsizei height ); + +typedef void ( WINAPI * PFN_QE_CHECKOPENGLFORERRORS )(); + +// glu stuff +// TTimo: NOTE: relying on glu might not be such a good idea. On many systems, the GLU lib is outdated, misversioned etc. +typedef void ( APIENTRY * PFN_QGLUPERSPECTIVE )( GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar ); +typedef void ( APIENTRY * PFN_QGLULOOKAT )( GLdouble eyex, GLdouble eyey, GLdouble eyez, + GLdouble centerx, GLdouble centery, GLdouble centerz, + GLdouble upx, GLdouble upy, GLdouble upz ); +//++timo gluErrorString is defined but not exposed in the IGL interface + + +// plugins drawing inside the GL windows +//++timo TODO: add hooking into other windows (Z and .. texture??) +//+timo NOTE: this could be moved to the messaging system instead of having a dedicated interface <- yet I don't know how +typedef void ( WINAPI * PFN_QERAPP_HOOKGL2DWINDOW )( IGL2DWindow * ); +typedef void ( WINAPI * PFN_QERAPP_UNHOOKGL2DWINDOW )( IGL2DWindow * ); +typedef void ( WINAPI * PFN_QERAPP_HOOKGL3DWINDOW )( IGL3DWindow * ); +typedef void ( WINAPI * PFN_QERAPP_UNHOOKGL3DWINDOW )( IGL3DWindow * ); + +struct _QERQglTable +{ + //++timo do we really wanna play with versions ? + // float m_fVersion; + int m_nSize; + PFN_QGLALPHAFUNC m_pfn_qglAlphaFunc; + PFN_QGLBEGIN m_pfn_qglBegin; + PFN_QGLBINDTEXTURE m_pfn_qglBindTexture; + PFN_QGLBLENDFUNC m_pfn_qglBlendFunc; + PFN_QGLCALLLIST m_pfn_qglCallList; + PFN_QGLCLEAR m_pfn_qglClear; + PFN_QGLCLEARCOLOR m_pfn_qglClearColor; + PFN_QGLCALLLISTS m_pfn_qglCallLists; + PFN_QGLCLEARDEPTH m_pfn_qglClearDepth; + PFN_QGLCOLOR3F m_pfn_qglColor3f; + PFN_QGLCOLOR3FV m_pfn_qglColor3fv; + PFN_QGLCOLOR4F m_pfn_qglColor4f; + PFN_QGLCOLOR4FV m_pfn_qglColor4fv; + PFN_QGLCOLOR4UBV m_pfn_qglColor4ubv; // ydnar + PFN_QGLCOLORPOINTER m_pfn_qglColorPointer; + PFN_QGLCULLFACE m_pfn_qglCullFace; + PFN_QGLDELETELISTS m_pfn_qglDeleteLists; + PFN_QGLDELETETEXTURES m_pfn_qglDeleteTextures; + PFN_QGLDEPTHFUNC m_pfn_qglDepthFunc; + PFN_QGLDEPTHMASK m_pfn_qglDepthMask; + PFN_QGLDISABLE m_pfn_qglDisable; + PFN_QGLDISABLECLIENTSTATE m_pfn_qglDisableClientState; + PFN_QGLDRAWELEMENTS m_pfn_qglDrawElements; + PFN_QGLENABLE m_pfn_qglEnable; + PFN_QGLENABLECLIENTSTATE m_pfn_qglEnableClientState; + PFN_QGLEND m_pfn_qglEnd; + PFN_QGLENDLIST m_pfn_qglEndList; + PFN_QGLFOGF m_pfn_qglFogf; + PFN_QGLFOGFV m_pfn_qglFogfv; + PFN_QGLFOGFI m_pfn_qglFogi; + PFN_QGLGENLISTS m_pfn_qglGenLists; + PFN_QGLGENTEXTURES m_pfn_qglGenTextures; + PFN_QGLGETDOUBLEV m_pfn_qglGetDoublev; + PFN_QGLGETINTEGERV m_pfn_qglGetIntegerv; + PFN_QGLHINT m_pfn_qglHint; + PFN_QGLLIGHTFV m_pfn_qglLightfv; + PFN_QGLLINESTIPPLE m_pfn_qglLineStipple; + PFN_QGLLINEWIDTH m_pfn_qglLineWidth; + PFN_QGLLISTBASE m_pfn_qglListBase; + PFN_QGLLOADIDENTITY m_pfn_qglLoadIdentity; + PFN_QGLMATERIALF m_pfn_qglMaterialf; + PFN_QGLMATERIALFV m_pfn_qglMaterialfv; + PFN_QGLMATRIXMODE m_pfn_qglMatrixMode; + PFN_QGLMULTMATRIXF m_pfn_qglMultMatrixf; + PFN_QGLNEWLIST m_pfn_qglNewList; + PFN_QGLNORMAL3F m_pfn_qglNormal3f; + PFN_QGLNORMAL3FV m_pfn_qglNormal3fv; + PFN_QGLNORMALPOINTER m_pfn_qglNormalPointer; + PFN_QGLORTHO m_pfn_qglOrtho; + PFN_QGLPOINTSIZE m_pfn_qglPointSize; + PFN_QGLPOLYGONMODE m_pfn_qglPolygonMode; + PFN_QGLPOPATTRIB m_pfn_qglPopAttrib; + PFN_QGLPOPMATRIX m_pfn_qglPopMatrix; + PFN_QGLPUSHATTRIB m_pfn_qglPushAttrib; + PFN_QGLPUSHMATRIX m_pfn_qglPushMatrix; + PFN_QGLRASTERPOS3FV m_pfn_qglRasterPos3fv; + PFN_QGLROTATED m_pfn_qglRotated; + PFN_QGLROTATEF m_pfn_qglRotatef; + PFN_QGLSCALEF m_pfn_qglScalef; + PFN_QGLSCISSOR m_pfn_qglScissor; + PFN_QGLSHADEMODEL m_pfn_qglShadeModel; + PFN_QGLTEXCOORD2F m_pfn_qglTexCoord2f; + PFN_QGLTEXCOORD2FV m_pfn_qglTexCoord2fv; + PFN_QGLTEXCOORDPOINTER m_pfn_qglTexCoordPointer; + PFN_QGLTEXENVF m_pfn_qglTexEnvf; + PFN_QGLTEXGENF m_pfn_qglTexGenf; + PFN_QGLTEXIMAGE1D m_pfn_qglTexImage1D; + PFN_QGLTEXIMAGE2D m_pfn_qglTexImage2D; + PFN_QGLTEXPARAMETERF m_pfn_qglTexParameterf; + PFN_QGLTEXPARAMETERFV m_pfn_qglTexParameterfv; + PFN_QGLTEXPARAMETERI m_pfn_qglTexParameteri; + PFN_QGLTEXPARAMETERIV m_pfn_qglTexParameteriv; + PFN_QGLTEXSUBIMAGE1D m_pfn_qglTexSubImage1D; + PFN_QGLTEXSUBIMAGE2D m_pfn_qglTexSubImage2D; + PFN_QGLTRANSLATED m_pfn_qglTranslated; + PFN_QGLTRANSLATEF m_pfn_qglTranslatef; + PFN_QGLVERTEX2F m_pfn_qglVertex2f; + PFN_QGLVERTEX3F m_pfn_qglVertex3f; + PFN_QGLVERTEX3FV m_pfn_qglVertex3fv; + PFN_QGLVERTEXPOINTER m_pfn_qglVertexPointer; + PFN_QGLVIEWPORT m_pfn_qglViewport; + + PFN_QE_CHECKOPENGLFORERRORS m_pfn_QE_CheckOpenGLForErrors; + + // glu stuff + PFN_QGLUPERSPECTIVE m_pfn_qgluPerspective; + PFN_QGLULOOKAT m_pfn_qgluLookAt; + + // plugin entities drawing inside Radiant windows + PFN_QERAPP_HOOKGL2DWINDOW m_pfnHookGL2DWindow; + PFN_QERAPP_UNHOOKGL2DWINDOW m_pfnUnHookGL2DWindow; + PFN_QERAPP_HOOKGL3DWINDOW m_pfnHookGL3DWindow; + PFN_QERAPP_UNHOOKGL3DWINDOW m_pfnUnHookGL3DWindow; +}; + +#endif