aboutsummaryrefslogtreecommitdiffstats
path: root/q3radiant/igl.h
blob: 035cb77214d05a302fe7e9b8558795cc2d05bac8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
/*
===========================================================================
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 <gl/gl.h>
#include <gl/glu.h>

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