/* =========================================================================== Copyright (C) 1999-2005 Id Software, Inc. This file is part of Quake III Arena source code. Quake III Arena source code 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. Quake III Arena source code 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 Foobar; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA =========================================================================== */ //----------------------------------------------------------------------------- // // $LogFile$ // $Revision: 1.7.2.3 $ // $Author: ttimo $ // $Date: 2000/02/16 15:43:14 $ // $Log: igl.h,v $ // Revision 1.7.2.3 2000/02/16 15:43:14 ttimo // Curry bug #101996: added glTexParameterf and glNormal3f // // Revision 1.7.2.2 2000/02/13 17:48:07 ttimo // Curry bug #101874 - added glTexGenf to GL interface // // Revision 1.7.2.1 2000/02/04 22:59:34 ttimo // messaging API preview // // Revision 1.7 2000/01/18 00:43:59 ttimo // RC // // Revision 1.6 2000/01/13 00:46:41 ttimo // Merged in patches in / out // Revision 1.1.1.4 2000/01/18 00:17:12 ttimo // merging in for RC // // Revision 1.5 2000/01/11 22:14:48 ttimo // cleaning up after merging and thinks badly fucked up // // Revision 1.2 2000/01/09 04:39:14 ttimo // added some bindings to the GL table // // Revision 1.1.1.3 2000/01/11 16:43:15 ttimo // merged version from old reposit and Robert update // // Revision 1.1.1.1 2000/01/07 17:17:30 ttimo // initial import of Q3Radiant module // // Revision 1.1.1.1 2000/01/07 17:17:30 ttimo // initial import of Q3Radiant module // // Revision 1.3 2000/01/17 23:53:44 TBesset // ready for merge in sourceforge (RC candidate) // // Revision 1.2 2000/01/07 16:40:13 TBesset // merged from BSP frontend // // Revision 1.1.1.3 1999/12/29 18:31:27 TBesset // Q3Radiant public version // // Revision 1.1.1.1.2.1 1999/12/29 21:39:45 TBesset // updated to update3 from Robert // // Revision 1.1.1.3 1999/12/29 18:31:27 TBesset // Q3Radiant public version // Revision 1.1.1.3 1999/12/29 18:31:27 TBesset // Q3Radiant public version // // Revision 1.2 1999/11/22 17:46:48 Timo & Christine // merged EARadiant into the main tree // bug fixes for Q3Plugin / EAPlugin // export for Robert // // Revision 1.1.2.2 1999/11/03 20:38:04 Timo & Christine // MEAN plugin for Q3Radiant, alpha version // // Revision 1.1.2.1.2.1 1999/10/27 08:34:29 Timo & Christine // preview version of the texture tools plugin is ready // ( TexTool.dll plugin is in Q3Plugin module ) // plugins can draw in their own window using Radiant's qgl bindings // // Revision 1.1.2.1 1999/10/08 16:28:14 Timo & Christine // started plugin extensions for EA features support in Q3Radiant // MEAN files plugin, and Surface Properties plugin // // // DESCRIPTION: // all purpose OpenGL interface for Q3Radiant plugins // #ifndef __IGL_H__ #define __IGL_H__ // we use this class to let plugins draw inside the Radiant windows class IGLWindow { public: // Increment the number of references to this object virtual void IncRef () = 0; // Decrement the reference count virtual void DecRef () = 0; virtual void Draw( VIEWTYPE vt ) = 0; }; // define a GUID for this interface so plugins can access and reference it // {0F237620-854B-11d3-8EF3-A2DFBD53251B} static const GUID QERQglTable_GUID = { 0xf237620, 0x854b, 0x11d3, { 0x8e, 0xf3, 0xa2, 0xdf, 0xbd, 0x53, 0x25, 0x1b } }; #include #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_QGLCOLOR4F) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); typedef void (APIENTRY* PFN_QGLCULLFACE) (GLenum mode); typedef void (APIENTRY* PFN_QGLDELETELISTS) (GLuint list, GLsizei range); typedef void (APIENTRY* PFN_QGLDISABLE) (GLenum cap); typedef void (APIENTRY* PFN_QGLENABLE) (GLenum cap); typedef void (APIENTRY* PFN_QGLEND) (); typedef void (APIENTRY* PFN_QGLENDLIST) (void); typedef GLuint (APIENTRY* PFN_QGLGENLISTS) (GLsizei range); typedef void (APIENTRY* PFN_QGLLISTBASE) (GLuint base); typedef void (APIENTRY* PFN_QGLLOADIDENTITY) (); typedef void (APIENTRY* PFN_QGLMATRIXMODE) (GLenum mode); typedef void (APIENTRY* PFN_QGLNEWLIST) (GLuint list, GLenum mode); typedef void (APIENTRY* PFN_QGLNORMAL3F) (GLfloat nx, GLfloat ny, GLfloat nz); 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_QGLPOPMATRIX) (); typedef void (APIENTRY* PFN_QGLPUSHMATRIX) (); 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_QGLTEXCOORD2F) (GLfloat s, GLfloat t); 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_QGLTEXPARAMETERF) (GLenum target, GLenum pname, GLfloat param); 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_QGLVIEWPORT) (GLint x, GLint y, GLsizei width, GLsizei height); typedef void (WINAPI* PFN_QE_CHECKOPENGLFORERRORS) (); typedef int (WINAPI* PFN_QEW_SETUPPIXELFORMAT) (HDC hDC, qboolean zbuffer ); typedef HGLRC (WINAPI* PFN_QWGL_CREATECONTEXT) (HDC); typedef BOOL (WINAPI* PFN_QWGL_DELETECONTEXT) (HGLRC); typedef BOOL (WINAPI* PFN_QWGL_MAKECURRENT) (HDC, HGLRC); typedef BOOL (WINAPI* PFN_QWGL_SHARELISTS) (HGLRC, HGLRC); typedef BOOL (WINAPI* PFN_QWGL_SWAPBUFFERS) (HDC); typedef BOOL (WINAPI* PFN_QWGL_USEFONTBITMAPS) (HDC, DWORD, DWORD, DWORD); // glu stuff 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); // specially provided by the editor for plugins typedef HGLRC (WINAPI* PFN_QERAPP_GETQEGLOBALSHGLRC) (); // plugins drawing inside the GL windows //++timo TODO: add hooking into other windows //+timo NOTE: this could be moved to the messaging system instead of having a dedicated interface typedef void (WINAPI* PFN_QERAPP_HOOKXYGLWINDOW) (IGLWindow *); typedef void (WINAPI* PFN_QERAPP_UNHOOKGLWINDOW) (IGLWindow *); 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_QGLCOLOR4F m_pfn_qglColor4f; PFN_QGLCULLFACE m_pfn_qglCullFace; PFN_QGLDELETELISTS m_pfn_qglDeleteLists; PFN_QGLDISABLE m_pfn_qglDisable; PFN_QGLENABLE m_pfn_qglEnable; PFN_QGLEND m_pfn_qglEnd; PFN_QGLENDLIST m_pfn_qglEndList; PFN_QGLGENLISTS m_pfn_qglGenLists; PFN_QGLLISTBASE m_pfn_qglListBase; PFN_QGLLOADIDENTITY m_pfn_qglLoadIdentity; PFN_QGLMATRIXMODE m_pfn_qglMatrixMode; PFN_QGLNEWLIST m_pfn_qglNewList; PFN_QGLNORMAL3F m_pfn_qglNormal3f; PFN_QGLORTHO m_pfn_qglOrtho; PFN_QGLPOINTSIZE m_pfn_qglPointSize; PFN_QGLPOLYGONMODE m_pfn_qglPolygonMode; PFN_QGLPOPMATRIX m_pfn_qglPopMatrix; PFN_QGLPUSHMATRIX m_pfn_qglPushMatrix; PFN_QGLROTATED m_pfn_qglRotated; PFN_QGLROTATEF m_pfn_qglRotatef; PFN_QGLSCALEF m_pfn_qglScalef; PFN_QGLTEXCOORD2F m_pfn_qglTexCoord2f; PFN_QGLTEXENVF m_pfn_qglTexEnvf; PFN_QGLTEXGENF m_pfn_qglTexGenf; PFN_QGLTEXPARAMETERF m_pfn_qglTexParameterf; PFN_QGLTRANSLATED m_pfn_qglTranslated; PFN_QGLTRANSLATEF m_pfn_qglTranslatef; PFN_QGLVERTEX2F m_pfn_qglVertex2f; PFN_QGLVERTEX3F m_pfn_qglVertex3f; PFN_QGLVIEWPORT m_pfn_qglViewport; PFN_QE_CHECKOPENGLFORERRORS m_pfn_QE_CheckOpenGLForErrors; PFN_QEW_SETUPPIXELFORMAT m_pfn_QEW_SetupPixelFormat; PFN_QWGL_CREATECONTEXT m_pfn_qwglCreateContext; PFN_QWGL_DELETECONTEXT m_pfn_qwglDeleteContext; PFN_QWGL_MAKECURRENT m_pfn_qwglMakeCurrent; PFN_QWGL_SHARELISTS m_pfn_qwglShareLists; PFN_QWGL_SWAPBUFFERS m_pfn_qwglSwapBuffers; PFN_QWGL_USEFONTBITMAPS m_pfn_qwglUseFontBitmaps; PFN_QERAPP_GETQEGLOBALSHGLRC m_pfnGetQeglobalsHGLRC; // glu stuff PFN_QGLUPERSPECTIVE m_pfn_qgluPerspective; PFN_QGLULOOKAT m_pfn_qgluLookAt; // plugin entities drawing inside Radiant windows PFN_QERAPP_HOOKXYGLWINDOW m_pfnHookXYGLWindow; PFN_QERAPP_UNHOOKGLWINDOW m_pfnUnHookGLWindow; }; #endif