home *** CD-ROM | disk | FTP | other *** search
/ PC PowerPlay 58 / pcpp58a.iso / extras / quake 3 source / Q3A_ToolSource.exe / Main / igl.h < prev    next >
Encoding:
C/C++ Source or Header  |  2001-01-02  |  9.6 KB  |  240 lines

  1. //-----------------------------------------------------------------------------
  2. //
  3. // $LogFile$
  4. // $Revision: 1.7.2.3 $
  5. // $Author: ttimo $
  6. // $Date: 2000/02/16 15:43:14 $
  7. // $Log: igl.h,v $
  8. // Revision 1.7.2.3  2000/02/16 15:43:14  ttimo
  9. // Curry bug #101996: added glTexParameterf and glNormal3f
  10. //
  11. // Revision 1.7.2.2  2000/02/13 17:48:07  ttimo
  12. // Curry bug #101874 - added glTexGenf to GL interface
  13. //
  14. // Revision 1.7.2.1  2000/02/04 22:59:34  ttimo
  15. // messaging API preview
  16. //
  17. // Revision 1.7  2000/01/18 00:43:59  ttimo
  18. // RC
  19. //
  20. // Revision 1.6  2000/01/13 00:46:41  ttimo
  21. // Merged in patches in / out
  22. // Revision 1.1.1.4  2000/01/18 00:17:12  ttimo
  23. // merging in for RC
  24. //
  25. // Revision 1.5  2000/01/11 22:14:48  ttimo
  26. // cleaning up after merging and thinks badly fucked up
  27. //
  28. // Revision 1.2  2000/01/09 04:39:14  ttimo
  29. // added some bindings to the GL table
  30. //
  31. // Revision 1.1.1.3  2000/01/11 16:43:15  ttimo
  32. // merged version from old reposit and Robert update
  33. //
  34. // Revision 1.1.1.1  2000/01/07 17:17:30  ttimo
  35. // initial import of Q3Radiant module
  36. //
  37. // Revision 1.1.1.1  2000/01/07 17:17:30  ttimo
  38. // initial import of Q3Radiant module
  39. //
  40. // Revision 1.3  2000/01/17 23:53:44  TBesset
  41. // ready for merge in sourceforge (RC candidate)
  42. //
  43. // Revision 1.2  2000/01/07 16:40:13  TBesset
  44. // merged from BSP frontend
  45. //
  46. // Revision 1.1.1.3  1999/12/29 18:31:27  TBesset
  47. // Q3Radiant public version
  48. //
  49. // Revision 1.1.1.1.2.1  1999/12/29 21:39:45  TBesset
  50. // updated to update3 from Robert
  51. //
  52. // Revision 1.1.1.3  1999/12/29 18:31:27  TBesset
  53. // Q3Radiant public version
  54. // Revision 1.1.1.3  1999/12/29 18:31:27  TBesset
  55. // Q3Radiant public version
  56. //
  57. // Revision 1.2  1999/11/22 17:46:48  Timo & Christine
  58. // merged EARadiant into the main tree
  59. // bug fixes for Q3Plugin / EAPlugin
  60. // export for Robert
  61. //
  62. // Revision 1.1.2.2  1999/11/03 20:38:04  Timo & Christine
  63. // MEAN plugin for Q3Radiant, alpha version
  64. //
  65. // Revision 1.1.2.1.2.1  1999/10/27 08:34:29  Timo & Christine
  66. // preview version of the texture tools plugin is ready
  67. // ( TexTool.dll plugin is in Q3Plugin module )
  68. // plugins can draw in their own window using Radiant's qgl bindings
  69. //
  70. // Revision 1.1.2.1  1999/10/08 16:28:14  Timo & Christine
  71. // started plugin extensions for EA features support in Q3Radiant
  72. // MEAN files plugin, and Surface Properties plugin
  73. //
  74. //
  75. // DESCRIPTION:
  76. // all purpose OpenGL interface for Q3Radiant plugins
  77. //
  78.  
  79. #ifndef __IGL_H__
  80. #define __IGL_H__
  81.  
  82. // we use this class to let plugins draw inside the Radiant windows
  83. class IGLWindow
  84. {
  85. public:
  86.     // Increment the number of references to this object
  87.     virtual void IncRef () = 0;
  88.     // Decrement the reference count
  89.     virtual void DecRef () = 0;
  90.     virtual void Draw( VIEWTYPE vt ) = 0;
  91. };
  92.  
  93. // define a GUID for this interface so plugins can access and reference it
  94. // {0F237620-854B-11d3-8EF3-A2DFBD53251B}
  95. static const GUID QERQglTable_GUID = 
  96. { 0xf237620, 0x854b, 0x11d3, { 0x8e, 0xf3, 0xa2, 0xdf, 0xbd, 0x53, 0x25, 0x1b } };
  97.  
  98. #include <gl/gl.h>
  99. #include <gl/glu.h>
  100.  
  101. typedef void (APIENTRY* PFN_QGLALPHAFUNC)        (GLenum func, GLclampf ref);
  102. typedef void (APIENTRY* PFN_QGLBEGIN)            (GLenum);
  103. typedef void (APIENTRY* PFN_QGLBINDTEXTURE)        (GLenum target, GLuint texture);
  104. typedef void (APIENTRY* PFN_QGLBLENDFUNC)       (GLenum sfactor, GLenum dfactor);
  105. typedef void (APIENTRY* PFN_QGLCALLLIST)        (GLuint list);
  106. typedef void (APIENTRY* PFN_QGLCALLLISTS)       (GLsizei n, GLenum type, const GLvoid *lists);
  107. typedef void (APIENTRY* PFN_QGLCLEAR)            (GLbitfield mask);
  108. typedef void (APIENTRY* PFN_QGLCLEARCOLOR)        (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
  109. typedef void (APIENTRY* PFN_QGLCLEARDEPTH)      (GLclampd depth);
  110. typedef void (APIENTRY* PFN_QGLCOLOR3F)            (GLfloat red, GLfloat green, GLfloat blue);
  111. typedef void (APIENTRY* PFN_QGLCOLOR4F)            (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
  112. typedef void (APIENTRY* PFN_QGLCULLFACE)        (GLenum mode);
  113. typedef void (APIENTRY* PFN_QGLDELETELISTS)     (GLuint list, GLsizei range);
  114. typedef void (APIENTRY* PFN_QGLDISABLE)            (GLenum cap);
  115. typedef void (APIENTRY* PFN_QGLENABLE)            (GLenum cap);
  116. typedef void (APIENTRY* PFN_QGLEND)                ();
  117. typedef void (APIENTRY* PFN_QGLENDLIST)         (void);
  118. typedef GLuint (APIENTRY* PFN_QGLGENLISTS)      (GLsizei range);
  119. typedef void (APIENTRY* PFN_QGLLISTBASE)        (GLuint base);
  120. typedef void (APIENTRY* PFN_QGLLOADIDENTITY)    ();
  121. typedef void (APIENTRY* PFN_QGLMATRIXMODE)        (GLenum mode);
  122. typedef void (APIENTRY* PFN_QGLNEWLIST)         (GLuint list, GLenum mode);
  123. typedef void (APIENTRY* PFN_QGLNORMAL3F)        (GLfloat nx, GLfloat ny, GLfloat nz);
  124. typedef void (APIENTRY* PFN_QGLORTHO)            (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);
  125. typedef void (APIENTRY*    PFN_QGLPOINTSIZE)        (GLfloat size);
  126. typedef void (APIENTRY* PFN_QGLPOLYGONMODE)        (GLenum face, GLenum mode);
  127. typedef void (APIENTRY* PFN_QGLPOPMATRIX)        ();
  128. typedef void (APIENTRY* PFN_QGLPUSHMATRIX)        ();
  129. typedef void (APIENTRY* PFN_QGLROTATED)         (GLdouble angle, GLdouble x, GLdouble y, GLdouble z);
  130. typedef void (APIENTRY* PFN_QGLROTATEF)            (GLfloat angle, GLfloat x, GLfloat y, GLfloat z);
  131. typedef void (APIENTRY* PFN_QGLSCALEF)            (GLfloat x, GLfloat y, GLfloat z);
  132. typedef void (APIENTRY* PFN_QGLTEXCOORD2F)        (GLfloat s, GLfloat t);
  133. typedef void (APIENTRY* PFN_QGLTEXENVF)            (GLenum target, GLenum pname, GLfloat param);
  134. typedef void (APIENTRY* PFN_QGLTEXGENF)            (GLenum coord, GLenum pname, GLfloat param);
  135. typedef void (APIENTRY* PFN_QGLTEXPARAMETERF)    (GLenum target, GLenum pname, GLfloat param);
  136. typedef void (APIENTRY* PFN_QGLTRANSLATED)      (GLdouble x, GLdouble y, GLdouble z);
  137. typedef void (APIENTRY* PFN_QGLTRANSLATEF)        (GLfloat x, GLfloat y, GLfloat z);
  138. typedef void (APIENTRY* PFN_QGLVERTEX2F)        (GLfloat x, GLfloat y);
  139. typedef void (APIENTRY* PFN_QGLVERTEX3F)        (GLfloat x, GLfloat y, GLfloat z);
  140. typedef void (APIENTRY* PFN_QGLVIEWPORT)        (GLint x, GLint y, GLsizei width, GLsizei height);
  141.  
  142. typedef void    (WINAPI* PFN_QE_CHECKOPENGLFORERRORS)    ();
  143. typedef int        (WINAPI* PFN_QEW_SETUPPIXELFORMAT)        (HDC hDC, qboolean zbuffer );
  144. typedef HGLRC    (WINAPI* PFN_QWGL_CREATECONTEXT)        (HDC);
  145. typedef BOOL    (WINAPI* PFN_QWGL_DELETECONTEXT)        (HGLRC);
  146. typedef BOOL    (WINAPI* PFN_QWGL_MAKECURRENT)            (HDC, HGLRC);
  147. typedef BOOL    (WINAPI* PFN_QWGL_SHARELISTS)            (HGLRC, HGLRC);
  148. typedef BOOL    (WINAPI* PFN_QWGL_SWAPBUFFERS)            (HDC);
  149. typedef BOOL    (WINAPI* PFN_QWGL_USEFONTBITMAPS)       (HDC, DWORD, DWORD, DWORD);
  150.  
  151. // glu stuff
  152. typedef void (APIENTRY * PFN_QGLUPERSPECTIVE) (GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar);
  153. typedef void (APIENTRY * PFN_QGLULOOKAT)(
  154.   GLdouble eyex,
  155.   GLdouble eyey,
  156.   GLdouble eyez,
  157.   GLdouble centerx,
  158.   GLdouble centery,
  159.   GLdouble centerz,
  160.   GLdouble upx,
  161.   GLdouble upy,
  162.   GLdouble upz);
  163.  
  164.  
  165. // specially provided by the editor for plugins
  166. typedef HGLRC    (WINAPI* PFN_QERAPP_GETQEGLOBALSHGLRC)    ();
  167.  
  168. // plugins drawing inside the GL windows
  169. //++timo TODO: add hooking into other windows
  170. //+timo NOTE: this could be moved to the messaging system instead of having a dedicated interface
  171. typedef void (WINAPI* PFN_QERAPP_HOOKXYGLWINDOW) (IGLWindow *);
  172. typedef void (WINAPI* PFN_QERAPP_UNHOOKGLWINDOW) (IGLWindow *);
  173.  
  174. struct _QERQglTable
  175. {
  176.     //++timo do we really wanna play with versions ?
  177. //    float m_fVersion;
  178.     int m_nSize;
  179.     PFN_QGLALPHAFUNC        m_pfn_qglAlphaFunc;
  180.     PFN_QGLBEGIN            m_pfn_qglBegin;
  181.     PFN_QGLBINDTEXTURE        m_pfn_qglBindTexture;
  182.     PFN_QGLBLENDFUNC        m_pfn_qglBlendFunc;
  183.     PFN_QGLCALLLIST            m_pfn_qglCallList;
  184.     PFN_QGLCLEAR            m_pfn_qglClear;
  185.     PFN_QGLCLEARCOLOR        m_pfn_qglClearColor;
  186.     PFN_QGLCALLLISTS        m_pfn_qglCallLists;
  187.     PFN_QGLCLEARDEPTH        m_pfn_qglClearDepth;
  188.     PFN_QGLCOLOR3F            m_pfn_qglColor3f;
  189.     PFN_QGLCOLOR4F            m_pfn_qglColor4f;
  190.     PFN_QGLCULLFACE            m_pfn_qglCullFace;
  191.     PFN_QGLDELETELISTS        m_pfn_qglDeleteLists;
  192.     PFN_QGLDISABLE            m_pfn_qglDisable;
  193.     PFN_QGLENABLE            m_pfn_qglEnable;
  194.     PFN_QGLEND                m_pfn_qglEnd;
  195.     PFN_QGLENDLIST            m_pfn_qglEndList;
  196.     PFN_QGLGENLISTS            m_pfn_qglGenLists;
  197.     PFN_QGLLISTBASE            m_pfn_qglListBase;
  198.     PFN_QGLLOADIDENTITY        m_pfn_qglLoadIdentity;
  199.     PFN_QGLMATRIXMODE        m_pfn_qglMatrixMode;
  200.     PFN_QGLNEWLIST            m_pfn_qglNewList;
  201.     PFN_QGLNORMAL3F            m_pfn_qglNormal3f;
  202.     PFN_QGLORTHO            m_pfn_qglOrtho;
  203.     PFN_QGLPOINTSIZE        m_pfn_qglPointSize;
  204.     PFN_QGLPOLYGONMODE        m_pfn_qglPolygonMode;
  205.     PFN_QGLPOPMATRIX        m_pfn_qglPopMatrix;
  206.     PFN_QGLPUSHMATRIX        m_pfn_qglPushMatrix;
  207.     PFN_QGLROTATED            m_pfn_qglRotated;
  208.     PFN_QGLROTATEF            m_pfn_qglRotatef;
  209.     PFN_QGLSCALEF            m_pfn_qglScalef;
  210.     PFN_QGLTEXCOORD2F        m_pfn_qglTexCoord2f;
  211.     PFN_QGLTEXENVF            m_pfn_qglTexEnvf;
  212.     PFN_QGLTEXGENF            m_pfn_qglTexGenf;
  213.     PFN_QGLTEXPARAMETERF    m_pfn_qglTexParameterf;
  214.     PFN_QGLTRANSLATED        m_pfn_qglTranslated;
  215.     PFN_QGLTRANSLATEF        m_pfn_qglTranslatef;
  216.     PFN_QGLVERTEX2F            m_pfn_qglVertex2f;
  217.     PFN_QGLVERTEX3F            m_pfn_qglVertex3f;
  218.     PFN_QGLVIEWPORT            m_pfn_qglViewport;
  219.  
  220.     PFN_QE_CHECKOPENGLFORERRORS    m_pfn_QE_CheckOpenGLForErrors;
  221.     PFN_QEW_SETUPPIXELFORMAT    m_pfn_QEW_SetupPixelFormat;
  222.     PFN_QWGL_CREATECONTEXT        m_pfn_qwglCreateContext;
  223.     PFN_QWGL_DELETECONTEXT      m_pfn_qwglDeleteContext;
  224.     PFN_QWGL_MAKECURRENT        m_pfn_qwglMakeCurrent;
  225.     PFN_QWGL_SHARELISTS            m_pfn_qwglShareLists;
  226.     PFN_QWGL_SWAPBUFFERS        m_pfn_qwglSwapBuffers;
  227.     PFN_QWGL_USEFONTBITMAPS        m_pfn_qwglUseFontBitmaps;
  228.  
  229.     PFN_QERAPP_GETQEGLOBALSHGLRC    m_pfnGetQeglobalsHGLRC;
  230.  
  231.     // glu stuff
  232.     PFN_QGLUPERSPECTIVE            m_pfn_qgluPerspective;
  233.     PFN_QGLULOOKAT                m_pfn_qgluLookAt;
  234.  
  235.     // plugin entities drawing inside Radiant windows
  236.     PFN_QERAPP_HOOKXYGLWINDOW    m_pfnHookXYGLWindow;
  237.     PFN_QERAPP_UNHOOKGLWINDOW    m_pfnUnHookGLWindow;
  238. };
  239.  
  240. #endif