1 
2 #ifndef __GL_EXTENSIONS_H__
3 #define __GL_EXTENSIONS_H__
4 
5 
6 #ifdef WIN32
7 #define WIN32_LEAN_AND_MEAN
8 #include <windows.h>
9 // �ǡ����Ѵ��������˥���̵����
10 #pragma warning(disable : 4244)     // MIPS
11 #pragma warning(disable : 4136)     // X86
12 #pragma warning(disable : 4051)     // ALPHA
13 #endif
14 
15 #define GL_GLEXT_PROTOTYPES
16 
17 #include <GL/gl.h>
18 #include <GL/glut.h>
19 
20 #include "MString.H"
21 #include "Math3D.H"
22 
23 
24 //#define DONOT_USE_GL_VERSION_1_1
25 
26 
27 //#define DONOT_USE_ARB_multitexture
28 //#define DONOT_USE_SGIS_multitexture
29 //#define DONOT_USE_EXT_multitexture
30 
31 //#define DONOT_USE_GLUT_GAME_MODE
32 //#define DONOT_USE_GLUT_KEYBOARD_STATUS
33 //#define DONOT_USE_GLUT_FULL_SCREEN
34 //#define DONOT_USE_GLUT_SET_CURSOR
35 
36 #if (GLUT_API_VERSION >= 3)
37 #define	IS_SUPPORTED_GLUT_FULL_SCREEN
38 #define	IS_SUPPORTED_GLUT_SET_CURSOR
39 #endif
40 
41 #if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 13)
42 #define IS_SUPPORTED_GLUT_GAME_MODE
43 #define IS_SUPPORTED_GLUT_KEYBOARD_STATUS
44 #endif
45 
46 #if defined DONOT_USE_GLUT_GAME_MODE && defined IS_SUPPORTED_GLUT_GAME_MODE
47 #undef IS_SUPPORTED_GLUT_GAME_MODE
48 #endif
49 
50 #if defined DONOT_USE_GLUT_FULL_SCREEN && defined IS_SUPPORTED_GLUT_FULL_SCREEN
51 #undef IS_SUPPORTED_GLUT_FULL_SCREEN
52 #endif
53 
54 #if defined DONOT_USE_GLUT_SET_CURSOR && defined IS_SUPPORTED_GLUT_SET_CURSOR
55 #undef IS_SUPPORTED_GLUT_SET_CURSOR
56 #endif
57 
58 
59 #if defined WIN32 && defined MESA
60 #ifndef __WIN32__
61 #define __WIN32__
62 #endif	// #ifndef __WIN32__
63 #endif	// #if defined WIN32 && defined MESA
64 
65 
66 // OpenGL-1.0 �Τ߻���
67 #if defined DONOT_USE_GL_VERSION_1_1 && defined GL_VERSION_1_1
68 #undef GL_VERSION_1_1
69 
70 // OpenGL-1.1 �ʹߤΥإå��Ǥ����������ʤ����̻�
71 #undef GL_POLYGON_OFFSET_FILL
72 #undef GL_POLYGON_OFFSET_POINT
73 #undef GL_POLYGON_OFFSET_LINE
74 #undef GL_POLYGON_OFFSET_FILL
75 #undef GL_POLYGON_OFFSET_FACTOR
76 #undef GL_POLYGON_OFFSET_UNITS
77 
78 #undef GL_ALPHA4
79 #undef GL_ALPHA8
80 #undef GL_ALPHA12
81 #undef GL_ALPHA16
82 #undef GL_LUMINANCE4
83 #undef GL_LUMINANCE8
84 #undef GL_LUMINANCE12
85 #undef GL_LUMINANCE16
86 #undef GL_LUMINANCE4_ALPHA4
87 #undef GL_LUMINANCE6_ALPHA2
88 #undef GL_LUMINANCE8_ALPHA8
89 #undef GL_LUMINANCE12_ALPHA4
90 #undef GL_LUMINANCE12_ALPHA12
91 #undef GL_LUMINANCE16_ALPHA16
92 #undef GL_INTENSITY
93 #undef GL_INTENSITY4
94 #undef GL_INTENSITY8
95 #undef GL_INTENSITY12
96 #undef GL_INTENSITY16
97 #undef GL_R3_G3_B2
98 #undef GL_RGB4
99 #undef GL_RGB5
100 #undef GL_RGB8
101 #undef GL_RGB10
102 #undef GL_RGB12
103 #undef GL_RGB16
104 #undef GL_RGBA2
105 #undef GL_RGBA4
106 #undef GL_RGB5_A1
107 #undef GL_RGBA8
108 #undef GL_RGB10_A2
109 #undef GL_RGBA12
110 #undef GL_RGBA16
111 
112 #undef GL_TEXTURE_RED_SIZE
113 #undef GL_TEXTURE_GREEN_SIZE
114 #undef GL_TEXTURE_BLUE_SIZE
115 #undef GL_TEXTURE_ALPHA_SIZE
116 #undef GL_TEXTURE_LUMINANCE_SIZE
117 #undef GL_TEXTURE_INTENSITY_SIZE
118 #undef GL_PROXY_TEXTURE_1D
119 #undef GL_PROXY_TEXTURE_2D
120 
121 #undef GL_TEXTURE_INTERNAL_FORMAT
122 
123 #endif	// #if defined DONOT_USE_GL_VERSION_1_1 && defined GL_VERSION_1_1
124 
125 
126 // Texture internal formats (OpenGL-1.0)
127 #ifndef GL_VERSION_1_1
128 
129 #define GL_ALPHA4                         0x803B
130 #define GL_ALPHA8                         0x803C
131 #define GL_ALPHA12                        0x803D
132 #define GL_ALPHA16                        0x803E
133 #define GL_LUMINANCE4                     0x803F
134 #define GL_LUMINANCE8                     0x8040
135 #define GL_LUMINANCE12                    0x8041
136 #define GL_LUMINANCE16                    0x8042
137 #define GL_LUMINANCE4_ALPHA4              0x8043
138 #define GL_LUMINANCE6_ALPHA2              0x8044
139 #define GL_LUMINANCE8_ALPHA8              0x8045
140 #define GL_LUMINANCE12_ALPHA4             0x8046
141 #define GL_LUMINANCE12_ALPHA12            0x8047
142 #define GL_LUMINANCE16_ALPHA16            0x8048
143 #define GL_INTENSITY                      0x8049
144 #define GL_INTENSITY4                     0x804A
145 #define GL_INTENSITY8                     0x804B
146 #define GL_INTENSITY12                    0x804C
147 #define GL_INTENSITY16                    0x804D
148 #define GL_R3_G3_B2                       0x2A10
149 #define GL_RGB4                           0x804F
150 #define GL_RGB5                           0x8050
151 #define GL_RGB8                           0x8051
152 #define GL_RGB10                          0x8052
153 #define GL_RGB12                          0x8053
154 #define GL_RGB16                          0x8054
155 #define GL_RGBA2                          0x8055
156 #define GL_RGBA4                          0x8056
157 #define GL_RGB5_A1                        0x8057
158 #define GL_RGBA8                          0x8058
159 #define GL_RGB10_A2                       0x8059
160 #define GL_RGBA12                         0x805A
161 #define GL_RGBA16                         0x805B
162 
163 #define GL_TEXTURE_RED_SIZE               0x805C
164 #define GL_TEXTURE_GREEN_SIZE             0x805D
165 #define GL_TEXTURE_BLUE_SIZE              0x805E
166 #define GL_TEXTURE_ALPHA_SIZE             0x805F
167 #define GL_TEXTURE_LUMINANCE_SIZE         0x8060
168 #define GL_TEXTURE_INTENSITY_SIZE         0x8061
169 #define GL_PROXY_TEXTURE_1D               0x8063
170 #define GL_PROXY_TEXTURE_2D               0x8064
171 
172 #define GL_TEXTURE_INTERNAL_FORMAT        0x1003	// = GL_TEXTURE_COMPONENTS
173 
174 #endif
175 
176 
177 
178 #ifdef WIN32
179 #define DEFAULT_OPENGL32_DLL	"opengl32.dll"
180 #endif	// #ifdef WIN32
181 
182 
183 // �ޥ���ƥ�������λ��Ѥˤ� OpenGL-1.1 �ʹߤ�ɬ��
184 #ifndef GL_VERSION_1_1
185 
186 #ifndef DONOT_USE_ARB_multitexture
187 #define DONOT_USE_ARB_multitexture
188 #endif	// DONOT_USE_SGIS_multitexture
189 
190 #ifndef DONOT_USE_SGIS_multitexture
191 #define DONOT_USE_SGIS_multitexture
192 #endif	// DONOT_USE_SGIS_multitexture
193 
194 #ifndef DONOT_USE_EXT_multitexture
195 #define DONOT_USE_EXT_multitexture
196 #endif	// DONOT_USE_SGIS_multitexture
197 
198 #endif	// #ifndef GL_VERSION_1_1
199 
200 
201 // OpenGL �С������ʾ������ʲ�����ޤǡ�
202 float GetOpenGLVersion() ;
203 
204 
205 // multitexture ���ݡ��Ȥ���С�������̤���
206 #if 1
207 #define GL_VERSION_multitexture
208 #endif
209 #define GL_VERSION_multitexture_F		9999.9f
210 
211 // separate_specular_color ���ݡ��Ȥ���С�������1.2��
212 #ifdef  GL_VERSION_1_2
213 #define GL_VERSION_separate_specular_color
214 #endif
215 #define GL_VERSION_separate_specular_color_F	1.2f
216 
217 // texture_filter_anisotropic ���ݡ��Ȥ���С�������̤���
218 #ifdef  GL_VERSION_1_
219 #define GL_VERSION_texture_filter_anisotropic
220 #endif
221 #define GL_VERSION_texture_filter_anisotropic_F	9999.9f
222 
223 // texture object ���ݡ��Ȥ���С�������1.1��
224 #ifdef  GL_VERSION_1_1
225 #define GL_VERSION_texture_object
226 #endif
227 #define GL_VERSION_texture_object_F		1.1f
228 
229 // polygon offset ���ݡ��Ȥ���С�������1.1��
230 #ifdef  GL_VERSION_1_1
231 #define GL_VERSION_polygon_offset
232 #endif
233 #define GL_VERSION_polygon_offset_F		1.1f
234 
235 // texture_cube_map ���ݡ��Ȥ���С�������̤���
236 #if 1
237 #define GL_VERSION_texture_cube_map
238 #endif
239 #define GL_VERSION_texture_cube_map_F	9999.9f
240 
241 // texture_compression ���ݡ��Ȥ���С�������̤���
242 #if 1
243 #define GL_VERSION_texture_compression
244 #endif
245 #define GL_VERSION_texture_compression_F	9999.9f
246 
247 // texture_compression_s3tc ���ݡ��Ȥ���С������ʥ��ݡ��Ȥ�������ʤ�����
248 #ifdef  GL_VERSION_1_
249 #define GL_VERSION_texture_compression_s3tc
250 #endif
251 #define GL_VERSION_texture_compression_s3tc_F	9999.9f
252 
253 // texture_compression_FXT1 ���ݡ��Ȥ���С������ʥ��ݡ��Ȥ�������ʤ�����
254 #ifdef  GL_VERSION_1_
255 #define GL_VERSION_texture_compression_FXT1
256 #endif
257 #define GL_VERSION_texture_compression_FXT1_F	9999.9f
258 
259 
260 // OpenGL Extension ��Ϣ��Windows WGL �Τߡ�
261 #if defined(WIN32) && !defined(MESA)
262 
263 // �ޥ���ƥ��������Ϣ
264 
265 // ARB_multitexture
266 #ifndef GL_ARB_multitexture
267 #define GL_ARB_multitexture
268 
269 // define
270 #define GL_ACTIVE_TEXTURE_ARB               0x84E0
271 #define GL_CLIENT_ACTIVE_TEXTURE_ARB        0x84E1
272 #define GL_MAX_TEXTURE_UNITS_ARB            0x84E2
273 #define GL_TEXTURE0_ARB                     0x84C0
274 #define GL_TEXTURE1_ARB                     0x84C1
275 #define GL_TEXTURE2_ARB                     0x84C2
276 #define GL_TEXTURE3_ARB                     0x84C3
277 
278 #endif	// #ifndef GL_ARB_multitexture
279 
280 // ARB_multitexture functions
281 typedef void (APIENTRY * PFNGLMULTITEXCOORD1DARBPROC) (GLenum target, GLdouble s);
282 typedef void (APIENTRY * PFNGLMULTITEXCOORD1DVARBPROC) (GLenum target, const GLdouble *v);
283 typedef void (APIENTRY * PFNGLMULTITEXCOORD1FARBPROC) (GLenum target, GLfloat s);
284 typedef void (APIENTRY * PFNGLMULTITEXCOORD1FVARBPROC) (GLenum target, const GLfloat *v);
285 typedef void (APIENTRY * PFNGLMULTITEXCOORD1IARBPROC) (GLenum target, GLint s);
286 typedef void (APIENTRY * PFNGLMULTITEXCOORD1IVARBPROC) (GLenum target, const GLint *v);
287 typedef void (APIENTRY * PFNGLMULTITEXCOORD1SARBPROC) (GLenum target, GLshort s);
288 typedef void (APIENTRY * PFNGLMULTITEXCOORD1SVARBPROC) (GLenum target, const GLshort *v);
289 typedef void (APIENTRY * PFNGLMULTITEXCOORD2DARBPROC) (GLenum target, GLdouble s, GLdouble t);
290 typedef void (APIENTRY * PFNGLMULTITEXCOORD2DVARBPROC) (GLenum target, const GLdouble *v);
291 typedef void (APIENTRY * PFNGLMULTITEXCOORD2FARBPROC) (GLenum target, GLfloat s, GLfloat t);
292 typedef void (APIENTRY * PFNGLMULTITEXCOORD2FVARBPROC) (GLenum target, const GLfloat *v);
293 typedef void (APIENTRY * PFNGLMULTITEXCOORD2IARBPROC) (GLenum target, GLint s, GLint t);
294 typedef void (APIENTRY * PFNGLMULTITEXCOORD2IVARBPROC) (GLenum target, const GLint *v);
295 typedef void (APIENTRY * PFNGLMULTITEXCOORD2SARBPROC) (GLenum target, GLshort s, GLshort t);
296 typedef void (APIENTRY * PFNGLMULTITEXCOORD2SVARBPROC) (GLenum target, const GLshort *v);
297 typedef void (APIENTRY * PFNGLMULTITEXCOORD3DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r);
298 typedef void (APIENTRY * PFNGLMULTITEXCOORD3DVARBPROC) (GLenum target, const GLdouble *v);
299 typedef void (APIENTRY * PFNGLMULTITEXCOORD3FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r);
300 typedef void (APIENTRY * PFNGLMULTITEXCOORD3FVARBPROC) (GLenum target, const GLfloat *v);
301 typedef void (APIENTRY * PFNGLMULTITEXCOORD3IARBPROC) (GLenum target, GLint s, GLint t, GLint r);
302 typedef void (APIENTRY * PFNGLMULTITEXCOORD3IVARBPROC) (GLenum target, const GLint *v);
303 typedef void (APIENTRY * PFNGLMULTITEXCOORD3SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r);
304 typedef void (APIENTRY * PFNGLMULTITEXCOORD3SVARBPROC) (GLenum target, const GLshort *v);
305 typedef void (APIENTRY * PFNGLMULTITEXCOORD4DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q);
306 typedef void (APIENTRY * PFNGLMULTITEXCOORD4DVARBPROC) (GLenum target, const GLdouble *v);
307 typedef void (APIENTRY * PFNGLMULTITEXCOORD4FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);
308 typedef void (APIENTRY * PFNGLMULTITEXCOORD4FVARBPROC) (GLenum target, const GLfloat *v);
309 typedef void (APIENTRY * PFNGLMULTITEXCOORD4IARBPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q);
310 typedef void (APIENTRY * PFNGLMULTITEXCOORD4IVARBPROC) (GLenum target, const GLint *v);
311 typedef void (APIENTRY * PFNGLMULTITEXCOORD4SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q);
312 typedef void (APIENTRY * PFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLshort *v);
313 typedef void (APIENTRY * PFNGLACTIVETEXTUREARBPROC) (GLenum target);
314 typedef void (APIENTRY * PFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum target);
315 
316 extern PFNGLACTIVETEXTUREARBPROC   glActiveTextureARB ;
317 extern PFNGLMULTITEXCOORD2FARBPROC glMultiTexCoord2fARB ;
318 
319 
320 #ifndef GL_SGIS_multitexture
321 #define GL_SGIS_multitexture
322 
323 // define from
324 // SGIS_multitexture (from 3Dfx OpenGL Beta 2.1 "gl.h")
325 #ifndef MESA
326 #define GL_TEXTURE0_SGIS	0x835E
327 #define GL_TEXTURE1_SGIS	0x835F
328 
329 // Mesa
330 #else
331 #define GL_SELECTED_TEXTURE_SGIS			0x835C
332 #define GL_SELECTED_TEXTURE_COORD_SET_SGIS	0x835D
333 #define GL_MAX_TEXTURES_SGIS				0x835E
334 #define GL_TEXTURE0_SGIS					0x835F
335 #define GL_TEXTURE1_SGIS					0x8360
336 #define GL_TEXTURE2_SGIS					0x8361
337 #define GL_TEXTURE3_SGIS					0x8362
338 #define GL_TEXTURE_COORD_SET_SOURCE_SGIS	0x8363
339 
340 #endif	// #ifndef MESA ... #else
341 
342 #endif	// #ifndef GL_SGIS_multitexture
343 
344 // SGIS_multitexture functions
345 typedef void (APIENTRY * PFNGLSELECTTEXTURESGISPROC)			(GLenum target);
346 typedef void (APIENTRY * PFNGLSELECTTEXTURECOORDSETSGISPROC)	(GLenum target);
347 typedef void (APIENTRY * PFNGLMULTITEXCOORD2FSGISPROC)			(GLenum target, GLfloat s, GLfloat t);
348 
349 extern PFNGLSELECTTEXTURESGISPROC			glSelectTextureSGIS ;
350 extern PFNGLSELECTTEXTURECOORDSETSGISPROC	glSelectTextureCoordSetSGIS ;
351 extern PFNGLMULTITEXCOORD2FSGISPROC			glMultiTexCoord2fSGIS ;
352 
353 
354 // EXT_multitexture
355 #ifndef GL_EXT_multitexture
356 #define GL_EXT_multitexture
357 
358 // define
359 #define GL_SELECTED_TEXTURE_EXT                0x83C0
360 #define GL_SELECTED_TEXTURE_COORD_SET_EXT      0x83C1
361 #define GL_SELECTED_TEXTURE_TRANSFORM_EXT      0x83C2
362 #define GL_MAX_TEXTURES_EXT                    0x83C3
363 #define GL_MAX_TEXTURE_COORD_SETS_EXT          0x83C4
364 #define GL_TEXTURE_ENV_COORD_SET_EXT           0x83C5
365 #define GL_TEXTURE0_EXT                        0x83C6
366 #define GL_TEXTURE1_EXT                        0x83C7
367 #define GL_TEXTURE2_EXT                        0x83C8
368 #define GL_TEXTURE3_EXT                        0x83C9
369 
370 #endif	// #ifndef GL_EXT_multitexture
371 
372 // EXT_multitexture functions
373 typedef void (APIENTRY * PFNGLSELECTTEXTUREEXTPROC)			(GLenum target);
374 typedef void (APIENTRY * PFNGLSELECTTEXTURECOORDSETEXTPROC)	(GLenum target);
375 typedef void (APIENTRY * PFNGLMULTITEXCOORD2FEXTPROC)		(GLenum target, GLfloat s, GLfloat t);
376 
377 extern PFNGLSELECTTEXTUREEXTPROC			glSelectTextureEXT ;
378 extern PFNGLSELECTTEXTURECOORDSETEXTPROC	glSelectTextureCoordSetEXT ;
379 extern PFNGLMULTITEXCOORD2FEXTPROC			glMultiTexCoord2fEXT ;
380 
381 
382 // EXT_texture_object
383 #ifndef GL_EXT_texture_object
384 #define GL_EXT_texture_object
385 
386 // define
387 #define GL_TEXTURE_PRIORITY_EXT		0x8066
388 #define GL_TEXTURE_RESIDENT_EXT		0x8067
389 
390 #define GL_TEXTURE_1D_BINDING_EXT	0x8068
391 #define GL_TEXTURE_2D_BINDING_EXT	0x8069
392 #define GL_TEXTURE_3D_BINDING_EXT	0x806A
393 
394 #endif	// #ifndef GL_EXT_texture_object
395 
396 // EXT_texture_object functions
397 typedef void (APIENTRY * PFNGLGENTEXTURESEXTPROC)		(GLsizei n, GLuint *textures) ;
398 typedef void (APIENTRY * PFNGLDELETETEXTURESEXTPROC)	(GLsizei n, GLuint *textures) ;
399 typedef void (APIENTRY * PFNGLBINDTEXTUREEXTPROC)		(GLenum target, GLuint texture) ;
400 typedef GLboolean (APIENTRY * PFNGLISTEXTUREEXTPROC)	(GLuint texture) ;
401 
402 extern PFNGLGENTEXTURESEXTPROC		glGenTexturesEXT ;
403 extern PFNGLDELETETEXTURESEXTPROC	glDeleteTexturesEXT ;
404 extern PFNGLBINDTEXTUREEXTPROC		glBindTextureEXT ;
405 extern PFNGLISTEXTUREEXTPROC		glIsTextureEXT ;
406 
407 
408 // EXT_polygon_offset
409 #ifndef GL_EXT_polygon_offset
410 #define GL_EXT_polygon_offset
411 
412 // define
413 #define GL_POLYGON_OFFSET_EXT			0x8037
414 #define GL_POLYGON_OFFSET_FACTOR_EXT	0x8038
415 #define GL_POLYGON_OFFSET_BIAS_EXT		0x8039
416 
417 #endif	// #ifndef GL_EXT_polygon_offset
418 
419 // GL_EXT_polygon_offset functions
420 typedef void (APIENTRY * PFNGLPOLYGONOFFSETEXTPROC)	(GLfloat facter, GLfloat bias) ;
421 
422 extern PFNGLPOLYGONOFFSETEXTPROC	glPolygonOffsetEXT ;
423 
424 
425 
426 #endif	// #if defined(_WIN32) && !defined(MESA)
427 
428 
429 // �ޥ���ƥ�����������礷�������ե������ʼ��̻Ҥϴ� ^^;��
430 
431 #ifdef WIN32
432 typedef void (APIENTRY * PFNGLACTIVETEXTUREPROC)	(GLenum target) ;
433 typedef void (APIENTRY * PFNGLMULTITEXCOORD2FPROC)	(GLenum target, GLfloat s, GLfloat t) ;
434 #else
435 typedef void (* PFNGLACTIVETEXTUREPROC)		(GLenum target) ;
436 typedef void (* PFNGLMULTITEXCOORD2FPROC)	(GLenum target, GLfloat s, GLfloat t) ;
437 #endif	// #ifdef WIN32 ... #else
438 
439 extern PFNGLACTIVETEXTUREPROC	p_glActiveTexture ;
440 extern PFNGLMULTITEXCOORD2FPROC	p_glMultiTexCoord2f ;
441 
442 extern GLenum DEF_GL_MAX_TEXTURE_UNITS ;
443 extern GLenum DEF_GL_TEXTURE0 ;
444 extern GLenum DEF_GL_TEXTURE1 ;
445 extern GLenum DEF_GL_TEXTURE2 ;
446 extern GLenum DEF_GL_TEXTURE3 ;
447 
448 // OpenGL �� multitexture ���ݡ��Ȥ��ʤ��С������ξ��
449 #ifndef GL_VERSION_multitexture
450 
451 #define glActiveTexture			(*p_glActiveTexture)
452 #define glMultiTexCoord2f		(*p_glMultiTexCoord2f)
453 #define GL_MAX_TEXTURE_UNITS 	DEF_GL_MAX_TEXTURE_UNITS
454 #define GL_TEXTURE0				DEF_GL_TEXTURE0
455 #define GL_TEXTURE1				DEF_GL_TEXTURE1
456 #define GL_TEXTURE2				DEF_GL_TEXTURE2
457 #define GL_TEXTURE3				DEF_GL_TEXTURE3
458 
459 #endif	// #ifndef GL_VERSION_multitexture
460 
461 
462 // OpenGL Extension ���ݡ��ȥ����å�
463 int IsSupported_OpenGLExtension(const String& name) ;
464 
465 // multitexture ��Ϣ���ݡ��ȥ����å�
466 int IsSupported_ARB_multitexture() ;
467 int IsSupported_SGIS_multitexture() ;
468 int IsSupported_EXT_multitexture() ;
469 char *IsSupported_multitexture(int flag_ARB = TRUE, int flag_EXT = TRUE, int flag_SGIS = TRUE) ;
470 
471 // ���ݡ��ȼ���
472 #define CURRENT_NAME_GL_VERSION_multitexture	"OpenGL-1.? Multi-Texture"
473 #define CURRENT_NAME_GL_ARB_multitexture		"GL_ARB_multitexture"
474 #define CURRENT_NAME_GL_EXT_multitexture		"GL_EXT_multitexture"
475 #define CURRENT_NAME_GL_SGIS_multitexture		"GL_SGIS_multitexture"
476 
477 
478 // �ؿ��ɲä��ʤ����ѥ�᥿�ɲäΤߤγ�ĥ��ǽ
479 // ������ॵ�ݡ��ȤΤߤǻ��Ѳ�ǽ
480 
481 // �ե��������ǥ���
482 
483 // WIN_phong_shading
484 // �ؿ����ɲäϤʤ����ѥ�᥿���ɲäΤߤǤ��뤿�ᡢ�������Τߤ��б��� OK
485 #ifndef GL_WIN_phong_shading
486 #define GL_WIN_phong_shading
487 // define
488 #define GL_PHONG_WIN			((GLenum)0x80EA)
489 #define GL_PHONG_HINT_WIN		((GLenum)0x80EB)
490 
491 #endif	// #ifndef GL_WIN_phong_shading
492 
493 
494 // Separate Specular Color
495 
496 // OpenGL �� separate_specular_color ���ݡ��Ȥ��ʤ��С�������1.2 ̤���ˤΤ�
497 // �ؿ����ɲäϤʤ����ѥ�᥿���ɲäΤߤǤ��뤿�ᡢ�������Τߤ��б��� OK
498 #ifndef GL_VERSION_separate_specular_color
499 
500 #define GL_LIGHT_MODEL_COLOR_CONTROL		((GLenum)0x81F8)
501 #define GL_SINGLE_COLOR						((GLenum)0x81F9)
502 #define GL_SEPARATE_SPECULAR_COLOR			((GLenum)0x81FA)
503 
504 #endif	// #ifndef GL_VERSION_separate_specular_color
505 
506 
507 // Separate Specular Color Extensions
508 // OpenGL �С������˴ؤ�餺���å�
509 
510 // EXT_separate_specular_color
511 #ifndef GL_EXT_separate_specular_color
512 #define GL_EXT_separate_specular_color
513 
514 // define
515 #define GL_LIGHT_MODEL_COLOR_CONTROL_EXT	GL_LIGHT_MODEL_COLOR_CONTROL
516 #define GL_SINGLE_COLOR_EXT					GL_SINGLE_COLOR
517 #define GL_SEPARATE_SPECULAR_COLOR_EXT		GL_SEPARATE_SPECULAR_COLOR
518 
519 #endif	// #ifndef GL_EXT_separate_specular_color
520 
521 // ARB_separate_specular_color
522 #ifndef GL_ARB_separate_specular_color
523 #define GL_ARB_separate_specular_color
524 
525 // define
526 #define GL_LIGHT_MODEL_COLOR_CONTROL_ARB	GL_LIGHT_MODEL_COLOR_CONTROL
527 #define GL_SINGLE_COLOR_ARB					GL_SINGLE_COLOR
528 #define GL_SEPARATE_SPECULAR_COLOR_ARB		GL_SEPARATE_SPECULAR_COLOR
529 
530 #endif	// #ifndef GL_ARB_separate_specular_color
531 
532 
533 // �������ꤳ�����顪����������������������������������������������������������������������
534 
535 // Texture Filter Anisotropic
536 
537 // OpenGL �� texture_filter_anisotropic ���ݡ��Ȥ��ʤ��С�������̤��ˤΤ�
538 // �ؿ����ɲäϤʤ����ѥ�᥿���ɲäΤߤǤ��뤿�ᡢ�������Τߤ��б��� OK
539 #ifndef GL_VERSION_texture_filter_anisotropic
540 
541 // �С��������������ݡ��Ȥ��줿�����ǡ������˷���ʸ��ߤ�̤��ʤΤǻ����
542 // �⤷�������ͤ������ͤȰۤʤ���ϡ��ѿ���ưŪ�˥��åȤ���褦�ѹ���ɬ�פʤΤ����
543 #define GL_TEXTURE_MAX_ANISOTROPY			((GLenum)0x84fe)
544 #define GL_MAX_TEXTURE_MAX_ANISOTROPY		((GLenum)0x84ff)
545 
546 #endif	// #ifndef GL_VERSION_texture_filter_anisotropic
547 
548 
549 // Texture Filter Anisotropic Extensions
550 // OpenGL �С������˴ؤ�餺���å�
551 
552 // EXT_texture_filter_anisotropic
553 #ifndef GL_EXT_texture_filter_anisotropic
554 #define GL_EXT_texture_filter_anisotropic
555 
556 // define
557 #define GL_TEXTURE_MAX_ANISOTROPY_EXT		((GLenum)0x84fe)
558 #define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT	((GLenum)0x84ff)
559 
560 #endif	// #ifndef GL_EXT_texture_filter_anisotropic
561 
562 
563 // Texture Reflection �Υѥ�᥿
564 // �������Ǥϸ���� OK
565 // OpenGL �� texture_cube_map ���ݡ��Ȥ��ʤ��С�������̤��ˤΤ�
566 
567 // �С��������������ݡ��Ȥ��줿�����ǡ������˷���ʸ��ߤ�̤��ʤΤǻ����
568 // �⤷�������ͤ������ͤȰۤʤ���ϡ��ѿ���ưŪ�˥��åȤ���褦�ѹ���ɬ�פʤΤ����
569 #ifndef GL_VERSION_texture_cube_map
570 #define GL_NORMAL_MAP				((GLenum)0x8511)
571 #define GL_REFLECTION_MAP			((GLenum)0x8512)
572 #endif	// #ifndef GL_VERSION_texture_cube_map
573 
574 // texture_cube_map extensions
575 // OpenGL �С������˴ؤ�餺���å�
576 
577 // ARB_texture_cube_map
578 #ifndef GL_ARB_texture_cube_map
579 #define GL_ARB_texture_cube_map
580 
581 #define GL_NORMAL_MAP_ARB					GL_NORMAL_MAP
582 #define GL_REFLECTION_MAP_ARB				GL_REFLECTION_MAP
583 
584 #define GL_TEXTURE_CUBE_MAP_ARB				((GLenum)0x8513)
585 #define GL_TEXTURE_BINDING_CUBE_MAP_ARB		((GLenum)0x8514)
586 
587 #define GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB	((GLenum)0x8515)
588 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB	((GLenum)0x8516)
589 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB	((GLenum)0x8517)
590 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB	((GLenum)0x8518)
591 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB	((GLenum)0x8519)
592 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB	((GLenum)0x851a)
593 
594 #endif	// #ifndef GL_ARB_texture_cube_map
595 
596 #define GL_EXT_texture_cube_map
597 
598 // EXT_texture_cube_map
599 #ifndef GL_EXT_texture_cube_map
600 #define GL_EXT_texture_cube_map
601 
602 #define GL_NORMAL_MAP_EXT					GL_NORMAL_MAP
603 #define GL_REFLECTION_MAP_EXT				GL_REFLECTION_MAP
604 
605 #define GL_TEXTURE_CUBE_MAP_EXT				((GLenum)0x8513)
606 #define GL_TEXTURE_BINDING_CUBE_MAP_EXT		((GLenum)0x8514)
607 
608 #define GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT	((GLenum)0x8515)
609 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT	((GLenum)0x8516)
610 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT	((GLenum)0x8517)
611 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT	((GLenum)0x8518)
612 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT	((GLenum)0x8519)
613 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT	((GLenum)0x851a)
614 
615 #endif	// #ifndef GL_EXT_texture_cube_map
616 
617 // NV_texgen_reflection
618 // OpenGL �С������˴ؤ�餺���å�
619 #ifndef GL_NV_texgen_reflection
620 #define GL_NV_texgen_reflection
621 
622 #define GL_NORMAL_MAP_NV					GL_NORMAL_MAP
623 #define GL_REFLECTION_MAP_NV				GL_REFLECTION_MAP
624 
625 #endif	// #ifndef GL_NV_texgen_reflection
626 
627 // GL_ARB_texture_cube_map ���ݡ��ȥ����å�
628 int IsSupported_ARB_texture_cube_map() ;
629 
630 // GL_EXT_texture_cube_map ���ݡ��ȥ����å�
631 int IsSupported_EXT_texture_cube_map() ;
632 
633 // GL_NV_texgen_reflection ���ݡ��ȥ����å�
634 int IsSupported_NV_texgen_reflection() ;
635 
636 // texgen_reflection ��Ϣ���ݡ��ȥ����å�
637 // GL_ARB_texture_cube_map �⤷����
638 // GL_EXT_texture_cube_map �⤷����
639 // GL_NV_texgen_reflection ���ݡ��Ȥ��Ƥ��뤫
640 char *IsSupported_texgen_reflection(int flag_ARB_texture_cube_map = TRUE,
641 									int flag_EXT_texture_cube_map = TRUE,
642 									int flag_NV_texgen_reflection = TRUE) ;
643 
644 // ���ݡ��ȼ���
645 #define CURRENT_NAME_GL_ARB_texture_cube_map	"GL_ARB_texture_cube_map"
646 #define CURRENT_NAME_GL_EXT_texture_cube_map	"GL_EXT_texture_cube_map"
647 #define CURRENT_NAME_GL_NV_texgen_reflection	"GL_NV_texgen_reflection"
648 
649 
650 // texture_compression
651 // �С��������������ݡ��Ȥ��줿�����ǡ������˷���ʸ��ߤ�̤��ʤΤǻ����
652 // �⤷�������ͤ������ͤȰۤʤ���ϡ��ѿ���ưŪ�˥��åȤ���褦�ѹ���ɬ�פʤΤ����
653 #ifndef GL_VERSION_texture_compression
654 #define GL_COMPRESSED_ALPHA				((GLenum)0x84E9)
655 #define GL_COMPRESSED_LUMINANCE			((GLenum)0x84EA)
656 #define GL_COMPRESSED_LUMINANCE_ALPHA	((GLenum)0x84EB)
657 #define GL_COMPRESSED_INTENSITY			((GLenum)0x84EC)
658 #define GL_COMPRESSED_RGB				((GLenum)0x84ED)
659 #define GL_COMPRESSED_RGBA				((GLenum)0x84EE)
660 #endif	// #ifndef GL_VERSION_texture_compression
661 
662 // �Ȥꤢ���� OpenGL �С������˴ؤ�餺���å�
663 #ifndef GL_ARB_texture_compression
664 #define GL_ARB_texture_compression
665 
666 #define GL_COMPRESSED_ALPHA_ARB				GL_COMPRESSED_ALPHA
667 #define GL_COMPRESSED_LUMINANCE_ARB			GL_COMPRESSED_LUMINANCE
668 #define GL_COMPRESSED_LUMINANCE_ALPHA_ARB	GL_COMPRESSED_LUMINANCE_ALPHA
669 #define GL_COMPRESSED_INTENSITY_ARB			GL_COMPRESSED_INTENSITY
670 #define GL_COMPRESSED_RGB_ARB				GL_COMPRESSED_RGB
671 #define GL_COMPRESSED_RGBA_ARB				GL_COMPRESSED_RGBA
672 
673 #endif	// #ifndef GL_ARB_texture_compression
674 
675 // GL_ARB_texture_compression ���ݡ��ȥ����å�
676 int IsSupported_ARB_texture_compression_Enum() ;
677 
678 // texgen_reflection ��Ϣ���ݡ��ȥ����å��ʤ������ȡ�����Τߤ� OK��
679 // ���ߤΤȤ��� GL_ARB_texture_compression �ʤΥ������ˤ��ݡ��Ȥ��Ƥ��뤫
680 char *IsSupported_texture_compression_Enum(int flag_ARB_texture_compression) ;
681 
682 // ���ݡ��ȼ���
683 #define CURRENT_NAME_GL_VERSION_texture_compression	"OpenGL-1.? Texture Compression"
684 #define CURRENT_NAME_GL_ARB_texture_compression		"GL_ARB_texture_compression"
685 
686 // texture_compression_s3tc
687 #ifndef GL_VERSION_texture_compression_s3tc
688 #define GL_COMPRESSED_RGB_S3TC_DXT1			((GLenum)0x83F0)
689 #define GL_COMPRESSED_RGBA_S3TC_DXT1		((GLenum)0x83F1)
690 #define GL_COMPRESSED_RGBA_S3TC_DXT3		((GLenum)0x83F2)
691 #define GL_COMPRESSED_RGBA_S3TC_DXT5		((GLenum)0x83F3)
692 #endif	// #ifndef GL_VERSION_texture_compression_s3tc
693 
694 #define GL_EXT_texture_compression_s3tc
695 
696 #ifndef GL_EXT_texture_compression_s3tc
697 #define GL_EXT_texture_compression_s3tc
698 
699 #define GL_COMPRESSED_RGB_S3TC_DXT1_EXT		GL_COMPRESSED_RGB_S3TC_DXT1
700 #define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT	GL_COMPRESSED_RGBA_S3TC_DXT1
701 #define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT	GL_COMPRESSED_RGBA_S3TC_DXT3
702 #define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT	GL_COMPRESSED_RGBA_S3TC_DXT5
703 
704 #endif	// #ifndef GL_EXT_texture_compression_s3tc
705 
706 // texture_compression_FXT1
707 #ifndef GL_VERSION_texture_compression_FXT1
708 #define GL_COMPRESSED_RGB_FXT1			((GLenum)0x86B0)
709 #define GL_COMPRESSED_RGBA_FXT1			((GLenum)0x86B1)
710 #endif	// #ifndef GL_VERSION_texture_compression_FXT1
711 
712 #ifndef GL_3DFX_texture_compression_FXT1
713 #define GL_3DFX_texture_compression_FXT1
714 
715 #define GL_COMPRESSED_RGB_FXT1_3DFX			GL_COMPRESSED_RGB_FXT1
716 #define GL_COMPRESSED_RGBA_FXT1_3DFX		GL_COMPRESSED_RGBA_FXT1
717 
718 #endif	// #ifndef GL_EXT_texture_compression_s3tc
719 
720 
721 // GL_EXT_texture_compression_s3tc ���ݡ��ȥ����å�
722 int IsSupported_EXT_texture_compression_s3tc() ;
723 
724 // S3TC ��Ϣ���ݡ��ȥ����å�
725 char *IsSupported_texture_compression_s3tc(int flag_EXT_texture_compression_s3tc) ;
726 
727 // ���ݡ��ȼ���
728 #define CURRENT_NAME_GL_VERSION_texture_compression_s3tc	"OpenGL-1.? Texture Compression S3TC"	// ���ݡ��Ȥ�������ʤ���
729 #define CURRENT_NAME_GL_EXT_texture_compression_s3tc		"GL_EXT_texture_compression_s3tc"
730 
731 
732 // GL_3DFX_texture_compression_FXT1 ���ݡ��ȥ����å�
733 int IsSupported_3DFX_texture_compression_FXT1() ;
734 
735 // FXT1 ��Ϣ���ݡ��ȥ����å�
736 char *IsSupported_texture_compression_FXT1(int flag_3DFX_texture_compression_FXT1) ;
737 
738 // ���ݡ��ȼ���
739 #define CURRENT_NAME_GL_VERSION_texture_compression_FXT1	"OpenGL-1.? Texture Compression S3TC"	// ���ݡ��Ȥ�������ʤ���
740 #define CURRENT_NAME_GL_3DFX_texture_compression_FXT1		"GL_3DFX_texture_compression_FXT1"
741 
742 
743 
744 // �������ꤳ���ޤǡ�����������������������������������������������������������������������
745 
746 
747 // �ƥ������㡦���֥����������祤���ե�����
748 
749 #ifdef WIN32
750 typedef void (APIENTRY * PFNGLGENTEXTURESPROC)		(GLsizei n, GLuint *textures) ;
751 #ifdef MESA
752 typedef void (APIENTRY * PFNGLDELETETEXTURESPROC)	(GLsizei n, const GLuint *textures) ;
753 #else
754 typedef void (APIENTRY * PFNGLDELETETEXTURESPROC)	(GLsizei n, GLuint *textures) ;
755 #endif	// #ifdef MESA
756 typedef void (APIENTRY * PFNGLBINDTEXTUREPROC)		(GLenum target, GLuint texture) ;
757 typedef GLboolean (APIENTRY * PFNGLISTEXTUREPROC)	(GLuint texture) ;
758 #else
759 typedef void (* PFNGLGENTEXTURESPROC)				(GLsizei n, GLuint *textures) ;
760 typedef void (* PFNGLDELETETEXTURESPROC)			(GLsizei n, const GLuint *textures) ;
761 typedef void (* PFNGLBINDTEXTUREPROC)				(GLenum target, GLuint texture) ;
762 typedef GLboolean (* PFNGLISTEXTUREPROC)			(GLuint texture) ;
763 #endif	// #ifdef WIN32 ... #else
764 
765 extern PFNGLGENTEXTURESPROC		p_glGenTextures ;
766 extern PFNGLDELETETEXTURESPROC	p_glDeleteTextures ;
767 extern PFNGLBINDTEXTUREPROC		p_glBindTexture ;
768 extern PFNGLISTEXTUREPROC		p_glIsTexture ;
769 
770 // OpenGL �� texture object ���ݡ��Ȥ��ʤ��С������ξ��
771 #ifndef GL_VERSION_texture_object
772 
773 #define glGenTextures		(*p_glGenTextures)
774 #define glDeleteTextures	(*p_glDeleteTextures)
775 #define glBindTexture		(*p_glBindTexture)
776 #define glIsTexture			(*p_glIsTexture)
777 
778 #endif	// #ifndef GL_VERSION_texture_object
779 
780 // texture object ��Ϣ���ݡ��ȥ����å�
781 int IsSupported_EXT_texture_object() ;
782 char *IsSupported_texture_object(int flag_EXT = TRUE) ;
783 
784 // ���ݡ��ȼ���
785 #define CURRENT_NAME_GL_VERSION_texture_object	"OpenGL-1.1 Texture Object"
786 #define CURRENT_NAME_GL_EXT_texture_object		"GL_EXT_texture_object"
787 
788 
789 // �ݥꥴ�����ե��å����祤���ե�����
790 
791 #ifdef WIN32
792 typedef void (APIENTRY * PFNGLPOLYGONOFFSETPROC)	(GLfloat facter, GLfloat units) ;
793 #else
794 typedef void (* PFNGLPOLYGONOFFSETPROC)				(GLfloat facter, GLfloat units) ;
795 #endif	// #ifdef WIN32 ... #else
796 
797 extern PFNGLPOLYGONOFFSETPROC	p_glPolygonOffset ;
798 extern GLenum DEF_GL_POLYGON_OFFSET_POINT ;
799 extern GLenum DEF_GL_POLYGON_OFFSET_LINE ;
800 extern GLenum DEF_GL_POLYGON_OFFSET_FILL ;
801 extern GLenum DEF_GL_POLYGON_OFFSET_FACTOR ;
802 extern GLenum DEF_GL_POLYGON_OFFSET_UNITS ;
803 
804 // OpenGL �� polygon offset ���ݡ��Ȥ��ʤ��С������ξ��
805 #ifndef GL_VERSION_polygon_offset
806 
807 #define glPolygonOffset				(*p_glPolygonOffset)
808 #define GL_POLYGON_OFFSET_POINT		DEF_GL_POLYGON_OFFSET_POINT
809 #define GL_POLYGON_OFFSET_LINE		DEF_GL_POLYGON_OFFSET_LINE
810 #define GL_POLYGON_OFFSET_FILL		DEF_GL_POLYGON_OFFSET_FILL
811 #define GL_POLYGON_OFFSET_FACTOR	DEF_GL_POLYGON_OFFSET_FACTOR
812 #define GL_POLYGON_OFFSET_UNITS		DEF_GL_POLYGON_OFFSET_UNITS
813 
814 #endif	// #ifndef GL_VERSION_polygon_offset
815 
816 // polygon offset ��Ϣ���ݡ��ȥ����å�
817 int IsSupported_EXT_polygon_offset() ;
818 char *IsSupported_polygon_offset(int flag_EXT = TRUE) ;
819 
820 // ���ݡ��ȼ���
821 #define CURRENT_NAME_GL_VERSION_polygon_offset	"OpenGL-1.1 Polygon Offset"
822 #define CURRENT_NAME_GL_EXT_polygon_offset		"GL_EXT_polygon_offset"
823 
824 
825 // multitexture coord ����
826 //
827 // target ����ꤹ����ϡ�������
828 // IsSupported_multitexture() �ˤ����ѵ�ǽ����Ͽ��ɬ��
829 //
830 // IsSupported_SGIS_multitexture() �ϻ��Ѥ��ʤ������ɤ�
831 // �ޤ���SGIS �Ǥϴ���Ū��
832 // GL_MAX_TEXTURE_UNITS �ϻ����Բġʤ��ʤ餺����˥åȤȤߤʤ��������ɤ���
833 //
834 // target �λ��꤬�ʤ���� glTexCoord2f() ������
835 void TexCoord2f(GLfloat s, GLfloat t, int target = 0) ;
836 
837 
838 // glVertex3f() ������˥������
839 //
840 // s, t �ˤ���ɸ���꤬ͭ���ʾ��ϡ�
841 // glVetex() ������ glTexCoord2f() ������
842 //
843 // target �����ꤵ�줿��硢
844 // �� target �μ����ƥ��������˥åȤ˥ƥ��������ɸ���å�
845 //
846 // target ����ꤹ����ϡ�������
847 // IsSupported_multitexture() �ˤ����ѵ�ǽ����Ͽ��ɬ��
848 //
849 // IsSupported_SGIS_multitexture() �ϻ��Ѥ��ʤ������ɤ�
850 // �ޤ���SGIS �Ǥϴ���Ū��
851 // GL_MAX_TEXTURE_UNITS �ϻ����Բġʤ��ʤ餺����˥åȤȤߤʤ��������ɤ���
852 void Vertex3fWithTexAxis(GLfloat vx, GLfloat vy, GLfloat vz, GLfloat *s0 = NULL, GLfloat *t0 = NULL) ;
853 
854 void Vertex3fWithTexAxis(GLfloat vx, GLfloat vy, GLfloat vz,
855 						 int target0,      GLfloat *s0 = NULL, GLfloat *t0 = NULL,
856 						 int target1 = -1, GLfloat *s1 = NULL, GLfloat *t1 = NULL,
857 						 int target2 = -1, GLfloat *s2 = NULL, GLfloat *t2 = NULL,
858 						 int target3 = -1, GLfloat *s3 = NULL, GLfloat *t3 = NULL) ;
859 
860 
861 // glVertex3fv() ������˥������
862 //
863 // s, t �ˤ���ɸ���꤬ͭ���ʾ��ϡ�
864 // glVetex() ������ glTexCoord2f() ������
865 //
866 // target �����ꤵ�줿��硢
867 // �� target �μ����ƥ��������˥åȤ˥ƥ��������ɸ���å�
868 //
869 // target ����ꤹ����ϡ�������
870 // IsSupported_multitexture() �ˤ����ѵ�ǽ����Ͽ��ɬ��
871 //
872 // IsSupported_SGIS_multitexture() �ϻ��Ѥ��ʤ������ɤ�
873 // �ޤ���SGIS �Ǥϴ���Ū��
874 // GL_MAX_TEXTURE_UNITS �ϻ����Բġʤ��ʤ餺����˥åȤȤߤʤ��������ɤ���
875 void Vertex3fvWithTexAxis(GLfloat v[3], GLfloat *s0 = NULL, GLfloat *t0 = NULL) ;
876 
877 void Vertex3fvWithTexAxis(GLfloat v[3],
878 						  int target0,      GLfloat *s0 = NULL, GLfloat *t0 = NULL,
879 						  int target1 = -1, GLfloat *s1 = NULL, GLfloat *t1 = NULL,
880 						  int target2 = -1, GLfloat *s2 = NULL, GLfloat *t2 = NULL,
881 						  int target3 = -1, GLfloat *s3 = NULL, GLfloat *t3 = NULL) ;
882 
883 
884 // multitexture ���ѻ��κ���ƥ��������˥åȿ�
885 // �����Ȥ� SGIS_multitexture �ξ��ϣ�
886 // IsSupported_*_multitexture() ��̤������ξ�祼��
887 GLint GetMaxTextureUnits() ;
888 
889 // anisotropic filtering ���ѻ��κ��� max anisotropy
890 GLfloat GetMaxTextureMaxAnisotropy() ;
891 
892 // WIN_phong_shading ���ݡ��ȥ����å�
893 int IsSupported_WIN_phong_shading() ;
894 
895 // separate_specular_color ��Ϣ���ݡ��ȥ����å�
896 int IsSupported_ARB_separate_specular_color() ;
897 int IsSupported_EXT_separate_specular_color() ;
898 char *IsSupported_separate_specular_color(int flag_ARB = TRUE, int flag_EXT = TRUE) ;
899 // ���ݡ��ȼ���
900 #define CURRENT_NAME_GL_VERSION_separate_specular_color	"OpenGL-1.2 Separate Specular Color"
901 #define CURRENT_NAME_GL_ARB_separate_specular_color		"GL_ARB_separate_specular_color"
902 #define CURRENT_NAME_GL_EXT_separate_specular_color		"GL_EXT_separate_specular_color"
903 
904 // texture_filter_anisotropic ��Ϣ���ݡ��ȥ����å�
905 int IsSupported_EXT_texture_filter_anisotropic() ;
906 char *IsSupported_texture_filter_anisotropic(int flag_EXT = TRUE) ;
907 // ���ݡ��ȼ���
908 #define CURRENT_NAME_GL_VERSION_texture_filter_anisotropic	"OpenGL-1.? Texture Filter Anisotropic"
909 #define CURRENT_NAME_GL_EXT_texture_filter_anisotropic		"GL_EXT_texture_filter_anisotropic"
910 
911 
912 // ����ͭ���ˤʤäƤ������祤���ե�����
913 String CurrentInterface_multitexture() ;
914 String CurrentInterface_separate_specular_color() ;
915 String CurrentInterface_texture_filter_anisotropic() ;
916 String CurrentInterface_texture_object() ;
917 String CurrentInterface_polygon_offset() ;
918 String CurrentInterface_texture_cube_map() ;
919 String CurrentInterface_texgen_reflection() ;
920 String CurrentInterfaceEnum_texture_compression() ;
921 String CurrentInterface_texture_compression_s3tc() ;
922 String CurrentInterface_texture_compression_FXT1() ;
923 
924 
925 #if defined(DONOT_USE_ARB_multitexture) && defined(GL_ARB_multitexture)
926 #undef GL_ARB_multitexture
927 #endif
928 
929 #if defined(DONOT_USE_SGIS_multitexture) && defined(GL_SGIS_multitexture)
930 #undef GL_SGIS_multitexture
931 #endif
932 
933 #if defined(DONOT_USE_EXT_multitexture) && defined(GL_EXT_multitexture)
934 #undef GL_EXT_multitexture
935 #endif
936 
937 
938 #ifdef WIN32
939 
940 // Win32
941 // opengl32.dll �����
942 // ���ߤΤȤ���Win32 �� Mesa DLL ����Ѥ�������
943 class OpenGLDLLCtrl
944 {
945 public:
946 	HINSTANCE hLibOpenGL32 ;
947 
948 	static OpenGLDLLCtrl openGLDLLCtrl ;
949 
950 	void LoadLibrary(const String& openGL32_DLL = DEFAULT_OPENGL32_DLL)
951 	{
952 		if (!hLibOpenGL32 && openGL32_DLL != "")
953 			hLibOpenGL32 = ::LoadLibrary(openGL32_DLL) ;
954 	}
955 
FreeLibrary()956 	void FreeLibrary()
957 	{
958 		if (hLibOpenGL32)
959 			::FreeLibrary(hLibOpenGL32) ;
960 
961 		hLibOpenGL32 = NULL ;
962 	}
963 
964 	// �����ȥ饯��
965 	OpenGLDLLCtrl(const String& openGL32_DLL = "")
966 	{
967 		hLibOpenGL32 = NULL ;
968 		LoadLibrary(openGL32_DLL) ;
969 	}
970 
GetProcAddress(const String & procedureName)971 	void *GetProcAddress(const String& procedureName)
972 	{
973 		if (!hLibOpenGL32)
974 			LoadLibrary(DEFAULT_OPENGL32_DLL) ;
975 
976 		if (hLibOpenGL32)
977 			return ::GetProcAddress(hLibOpenGL32, procedureName) ;
978 		else
979 			return NULL ;
980 	}
981 
~OpenGLDLLCtrl()982 	~OpenGLDLLCtrl() { FreeLibrary() ; }
983 
984 } ;
985 
986 #endif	// #ifdef WIN32
987 
988 
989 // Texture Internal Formats
990 GLint InternalFormat(String str) ;
991 String InternalFormatString(GLint internalFormat) ;
992 
993 #endif	// #ifndef __GL_EXTENSIONS_H__
994