1
2 #include "GLextensions.H"
3
4
5 static char *current_MultiTextureInterfaceName = NULL ;
6 static String current_MultiTextureInterfaceNameString ;
7 static GLint current_maxTextureUnits = 1 ;
8
9 static char *current_SeparateSpecularColorInterfaceName = NULL ;
10 static String current_SeparateSpecularColorInterfaceNameString ;
11
12 static char *current_TextureFilterAnisotropicInterfaceName = NULL ;
13 static String current_TextureFilterAnisotropicInterfaceNameString ;
14
15 static char *current_TextureObjectInterfaceName = NULL ;
16 static String current_TextureObjectInterfaceNameString ;
17
18 static char *current_PolygonOffsetInterfaceName = NULL ;
19 static String current_PolygonOffsetInterfaceNameString ;
20
21 static char *current_TextureCubeMapInterfaceName = NULL ;
22 static String current_TextureCubeMapInterfaceNameString ;
23 static char *current_TexgenReflectionInterfaceName = NULL ;
24 static String current_TexgenReflectionInterfaceNameString ;
25
26 static char *current_TextureCompressionInterfaceEnumName = NULL ;
27 static String current_TextureCompressionInterfaceEnumNameString ;
28
29 static char *current_TextureCompressionS3TCInterfaceName = NULL ;
30 static String current_TextureCompressionS3TCInterfaceNameString ;
31
32 static char *current_TextureCompressionFXT1InterfaceName = NULL ;
33 static String current_TextureCompressionFXT1InterfaceNameString ;
34
35
36 // OpenGL Extension ��Ϣ
37 #if defined(WIN32) && !defined(MESA)
38
39 // ARB_multitexture
40 PFNGLACTIVETEXTUREARBPROC glActiveTextureARB = NULL ;
41 PFNGLMULTITEXCOORD2FARBPROC glMultiTexCoord2fARB = NULL ;
42
43 // SGIS_multitexture
44 PFNGLSELECTTEXTURESGISPROC glSelectTextureSGIS = NULL ;
45 PFNGLSELECTTEXTURECOORDSETSGISPROC glSelectTextureCoordSetSGIS = NULL ;
46 PFNGLMULTITEXCOORD2FSGISPROC glMultiTexCoord2fSGIS = NULL ;
47
48 // EXT_multitexture
49 PFNGLSELECTTEXTUREEXTPROC glSelectTextureEXT = NULL ;
50 PFNGLSELECTTEXTURECOORDSETEXTPROC glSelectTextureCoordSetEXT = NULL ;
51 PFNGLMULTITEXCOORD2FEXTPROC glMultiTexCoord2fEXT = NULL ;
52
53 // EXT_texture_object
54 PFNGLGENTEXTURESEXTPROC glGenTexturesEXT = NULL ;
55 PFNGLDELETETEXTURESEXTPROC glDeleteTexturesEXT = NULL ;
56 PFNGLBINDTEXTUREEXTPROC glBindTextureEXT = NULL ;
57 PFNGLISTEXTUREEXTPROC glIsTextureEXT = NULL ;
58
59 // EXT_polygon_offset
60 PFNGLPOLYGONOFFSETEXTPROC glPolygonOffset = NULL ;
61
62 #endif // #if defined(WIN32) && !defined(MESA)
63
64
65 // OpenGL �� multitexture �ݡ��Ȥ��ʤ��С������ξ���1.3 �ǥ��ݡ��ȡ���
66 //#ifndef GL_VERSION_multitexture
67
68 // �ޥ���ƥ�����������礷�����ե������ʼ��̻Ҥϴ� ^^;��
69 PFNGLACTIVETEXTUREPROC p_glActiveTexture = NULL ;
70 PFNGLMULTITEXCOORD2FPROC p_glMultiTexCoord2f = NULL ;
71
72 GLenum DEF_GL_MAX_TEXTURE_UNITS = (GLenum)0 ;
73
74 GLenum DEF_GL_TEXTURE0 = (GLenum)0 ;
75 GLenum DEF_GL_TEXTURE1 = (GLenum)0 ;
76 GLenum DEF_GL_TEXTURE2 = (GLenum)0 ;
77 GLenum DEF_GL_TEXTURE3 = (GLenum)0 ;
78
79 //#endif // #ifndef GL_VERSION_multitexture
80
81
82 // �ƥ������㡦���֥����������祤�ե�����
83 PFNGLGENTEXTURESPROC p_glGenTextures = NULL ;
84 PFNGLDELETETEXTURESPROC p_glDeleteTextures = NULL ;
85 PFNGLBINDTEXTUREPROC p_glBindTexture = NULL ;
86 PFNGLISTEXTUREPROC p_glIsTexture = NULL ;
87
88
89 // �ݥꥴ���ե��å����祤�ե�����
90 PFNGLPOLYGONOFFSETPROC p_glPolygonOffset = NULL ;
91
92 GLenum DEF_GL_POLYGON_OFFSET_POINT = (GLenum)0 ;
93 GLenum DEF_GL_POLYGON_OFFSET_LINE = (GLenum)0 ;
94 GLenum DEF_GL_POLYGON_OFFSET_FILL = (GLenum)0 ;
95 GLenum DEF_GL_POLYGON_OFFSET_FACTOR = (GLenum)0 ;
96 GLenum DEF_GL_POLYGON_OFFSET_UNITS = (GLenum)0 ;
97
98
99 // OpenGL �С������ʾ������ʲ����塢�Ĥޤ꺸���飳���
GetOpenGLVersion()100 float GetOpenGLVersion()
101 {
102 // static float OpenGL_Version = -1.0f ;
103 float OpenGL_Version = -1.0f ;
104
105 if (OpenGL_Version < 1.0f)
106 {
107 const char *str = (const char *)glGetString(GL_VERSION) ;
108 if (str)
109 {
110 String ver(str, 3) ; // �����飳��
111 OpenGL_Version = strtod(ver, NULL) ;
112 }
113 else
114 OpenGL_Version = 1.0f ; // �ǥե���Ȥ� 1.0
115
116 // error?
117 if (OpenGL_Version < 1.0f)
118 OpenGL_Version = 1.0f ;
119 }
120
121 return OpenGL_Version ;
122 }
123
124
125 // OpenGL Extension ���ݡ��ȥ����å�
IsSupported_OpenGLExtension(const String & name)126 int IsSupported_OpenGLExtension(const String& name)
127 {
128 // static String extensions ;
129 String extensions ;
130
131 if (extensions == "")
132 {
133 const char *str = (const char *)glGetString(GL_EXTENSIONS) ;
134 if (str)
135 extensions = str ;
136 }
137
138 if (strstr(extensions, name))
139 return TRUE ;
140 else
141 return FALSE ;
142 }
143
144
145 /* ������
146 int has_ARB_multitexture = IsSupported_ARB_multitexture() ;
147
148 #ifdef GL_ARB_multitexture
149 if (has_ARB_multitexture)
150 glActiveTextureARB(GL_TEXTURE0_ARB) ;
151 #endif
152 */
IsSupported_ARB_multitexture()153 int IsSupported_ARB_multitexture()
154 {
155 #ifndef GL_ARB_multitexture
156 return FALSE ;
157
158 #else
159 if (!IsSupported_OpenGLExtension(CURRENT_NAME_GL_ARB_multitexture))
160 return FALSE ; // ARB_multitexture not supported
161
162 // Get proc address (WGL only)
163 #if defined(WIN32) && !defined(MESA)
164 if (!(glActiveTextureARB = (PFNGLACTIVETEXTUREARBPROC)wglGetProcAddress("glActiveTextureARB")) &&
165 !(glActiveTextureARB = (PFNGLACTIVETEXTUREARBPROC)OpenGLDLLCtrl::openGLDLLCtrl.GetProcAddress("glActiveTextureARB")) && // ��Ǽ����Ǥ��ʤ��ä��Ȥ��ϡ�DLL ���饤��ݡ��ȡ�Mesa DLL �ѡ�
166 !(glActiveTextureARB = (PFNGLACTIVETEXTUREARBPROC)OpenGLDLLCtrl::openGLDLLCtrl.GetProcAddress("_glActiveTextureARB@4"))) // ��Ǽ����Ǥ��ʤ��ä��Ȥ��ϡ�DLL ���饤��ݡ��ȡ�Mesa DLL �ѡ�
167 return FALSE ;
168
169 if (!(glMultiTexCoord2fARB = (PFNGLMULTITEXCOORD2FARBPROC)wglGetProcAddress("glMultiTexCoord2fARB")) &&
170 !(glMultiTexCoord2fARB = (PFNGLMULTITEXCOORD2FARBPROC)OpenGLDLLCtrl::openGLDLLCtrl.GetProcAddress("glMultiTexCoord2fARB")) && // ��Ǽ����Ǥ��ʤ��ä��Ȥ��ϡ�DLL ���饤��ݡ��ȡ�Mesa DLL �ѡ�
171 !(glMultiTexCoord2fARB = (PFNGLMULTITEXCOORD2FARBPROC)OpenGLDLLCtrl::openGLDLLCtrl.GetProcAddress("_glMultiTexCoord2fARB@12"))) // ��Ǽ����Ǥ��ʤ��ä��Ȥ��ϡ�DLL ���饤��ݡ��ȡ�Mesa DLL �ѡ�
172 return FALSE ;
173 #endif // #if defined(WIN32) && !defined(MESA)
174
175 p_glActiveTexture = glActiveTextureARB ;
176 p_glMultiTexCoord2f = glMultiTexCoord2fARB ;
177
178 DEF_GL_MAX_TEXTURE_UNITS = GL_MAX_TEXTURE_UNITS_ARB ;
179
180 DEF_GL_TEXTURE0 = GL_TEXTURE0_ARB ;
181 DEF_GL_TEXTURE1 = GL_TEXTURE1_ARB ;
182 DEF_GL_TEXTURE2 = GL_TEXTURE2_ARB ;
183 DEF_GL_TEXTURE3 = GL_TEXTURE3_ARB ;
184
185 current_MultiTextureInterfaceName = CURRENT_NAME_GL_ARB_multitexture ;
186 current_MultiTextureInterfaceNameString = current_MultiTextureInterfaceName ;
187 return TRUE ;
188
189 #endif // #ifndef GL_ARB_multitexture ... #else
190 }
191
192
193 /* ������
194 int has_SGIS_multitexture = IsSupported_SGIS_multitexture() ;
195
196 #ifdef GL_SGIS_multitexture
197 if (has_SGIS_multitexture)
198 glSelectTextureSGIS(GL_TEXTURE0_SGIS) ;
199 #endif
200 */
201 // Mesa �Ǥ��ͤ���äƤ����ꤹ�뤿�ᡢ
202 // IsSupported_SGIS_multitexture() ��ľ�ܥ����뤻��
203 // IsSupported_multitexture() �ǤޤȤ����̵��
204 // ARB, EXT ������ͥ�褵��뤿�ᡢMesa �Ǥ� ARB, EXT �Τ����줫����ư�����Ϥ�
IsSupported_SGIS_multitexture()205 int IsSupported_SGIS_multitexture()
206 {
207 #ifndef GL_SGIS_multitexture
208 return FALSE ;
209
210 #else
211 if (!IsSupported_OpenGLExtension(CURRENT_NAME_GL_SGIS_multitexture))
212 return FALSE ; // SGIS_multitexture not supported
213
214 // Get proc address (WGL only)
215 #if defined(WIN32) && !defined(MESA)
216 if (!(glSelectTextureSGIS = (PFNGLSELECTTEXTURESGISPROC)wglGetProcAddress("glSelectTextureSGIS")) &&
217 !(glSelectTextureSGIS = (PFNGLSELECTTEXTURESGISPROC)OpenGLDLLCtrl::openGLDLLCtrl.GetProcAddress("glSelectTextureSGIS")) && // ��Ǽ����Ǥ��ʤ��ä��Ȥ��ϡ�DLL ���饤��ݡ��ȡ�Mesa DLL �ѡ�
218 !(glSelectTextureSGIS = (PFNGLSELECTTEXTURESGISPROC)OpenGLDLLCtrl::openGLDLLCtrl.GetProcAddress("_glSelectTextureSGIS@4"))) // ��Ǽ����Ǥ��ʤ��ä��Ȥ��ϡ�DLL ���饤��ݡ��ȡ�Mesa DLL �ѡ�
219 return FALSE ;
220
221 // glMTexCoord* �� glMultiTexCoord* �Σ�����¸�ߤ��뤿������������å�
222 if (!(glMultiTexCoord2fSGIS = (PFNGLMULTITEXCOORD2FSGISPROC)wglGetProcAddress("glMultiTexCoord2fSGIS")) &&
223 !(glMultiTexCoord2fSGIS = (PFNGLMULTITEXCOORD2FSGISPROC)wglGetProcAddress("glMTexCoord2fSGIS" )) &&
224 !(glMultiTexCoord2fSGIS = (PFNGLMULTITEXCOORD2FSGISPROC)OpenGLDLLCtrl::openGLDLLCtrl.GetProcAddress("glMultiTexCoord2fSGIS" )) && // ��Ǽ����Ǥ��ʤ��ä��Ȥ��ϡ�DLL ���饤��ݡ��ȡ�Mesa DLL �ѡ�
225 !(glMultiTexCoord2fSGIS = (PFNGLMULTITEXCOORD2FSGISPROC)OpenGLDLLCtrl::openGLDLLCtrl.GetProcAddress("_glMultiTexCoord2fSGIS@12")) && // ��Ǽ����Ǥ��ʤ��ä��Ȥ��ϡ�DLL ���饤��ݡ��ȡ�Mesa DLL �ѡ�
226 !(glMultiTexCoord2fSGIS = (PFNGLMULTITEXCOORD2FSGISPROC)OpenGLDLLCtrl::openGLDLLCtrl.GetProcAddress("glMTexCoord2fSGIS" )) && // ��Ǽ����Ǥ��ʤ��ä��Ȥ��ϡ�DLL ���饤��ݡ��ȡ�Mesa DLL �ѡ�
227 !(glMultiTexCoord2fSGIS = (PFNGLMULTITEXCOORD2FSGISPROC)OpenGLDLLCtrl::openGLDLLCtrl.GetProcAddress("_glMTexCoord2fSGIS@12" ))) // ��Ǽ����Ǥ��ʤ��ä��Ȥ��ϡ�DLL ���饤��ݡ��ȡ�Mesa DLL �ѡ�
228 return FALSE ;
229 #endif // #if defined(WIN32) && !defined(MESA)
230
231 p_glActiveTexture = glSelectTextureSGIS ;
232 p_glMultiTexCoord2f = glMultiTexCoord2fSGIS ;
233
234 #ifndef MESA
235 // Mesa �ʳ�
236 DEF_GL_TEXTURE0 = GL_TEXTURE0_SGIS ;
237 DEF_GL_TEXTURE1 = GL_TEXTURE1_SGIS ;
238
239 #else
240 // Mesa �Ǥϲ��Τ�������ۤʤ�
241 // ������ˤ��� IsSupported_SGIS_multitexture() ��ľ�ܥ����뤻��
242 // IsSupported_multitexture() �ǤޤȤ����̵��
243 // ARB, EXT ������ͥ�褵��뤿�ᡢMesa �Ǥ� ARB, EXT �Τ����줫����ư�����
244 DEF_GL_MAX_TEXTURE_UNITS = GL_MAX_TEXTURES_SGIS ;
245
246 DEF_GL_TEXTURE0 = GL_TEXTURE0_SGIS ;
247 DEF_GL_TEXTURE1 = GL_TEXTURE1_SGIS ;
248 DEF_GL_TEXTURE2 = GL_TEXTURE2_SGIS ;
249 DEF_GL_TEXTURE3 = GL_TEXTURE3_SGIS ;
250
251 #endif // #ifndef MESA ... #else
252
253 current_MultiTextureInterfaceName = CURRENT_NAME_GL_SGIS_multitexture ;
254 current_MultiTextureInterfaceNameString = current_MultiTextureInterfaceName ;
255 return TRUE ;
256
257 #endif // #ifndef GL_SGIS_multitexture ... #else
258 }
259
260
261 /* ������
262 int has_EXT_multitexture = IsSupported_EXT_multitexture() ;
263
264 #ifdef GL_EXT_multitexture
265 if (has_EXT_multitexture)
266 SelectTextureEXT(GL_TEXTURE0_EXT) ;
267 #endif
268 */
IsSupported_EXT_multitexture()269 int IsSupported_EXT_multitexture()
270 {
271 #ifndef GL_EXT_multitexture
272 return FALSE ;
273
274 #else
275 if (!IsSupported_OpenGLExtension(CURRENT_NAME_GL_EXT_multitexture))
276 return FALSE ; // EXT_multitexture not supported
277
278 // Get proc address (WGL only)
279 #if defined(WIN32) && !defined(MESA)
280 if (!(glSelectTextureEXT = (PFNGLSELECTTEXTUREEXTPROC)wglGetProcAddress("glSelectTextureEXT")) &&
281 !(glSelectTextureEXT = (PFNGLSELECTTEXTUREEXTPROC)OpenGLDLLCtrl::openGLDLLCtrl.GetProcAddress("glSelectTextureEXT")) && // ��Ǽ����Ǥ��ʤ��ä��Ȥ��ϡ�DLL ���饤��ݡ��ȡ�Mesa DLL �ѡ�
282 !(glSelectTextureEXT = (PFNGLSELECTTEXTUREEXTPROC)OpenGLDLLCtrl::openGLDLLCtrl.GetProcAddress("_glSelectTextureEXT@4"))) // ��Ǽ����Ǥ��ʤ��ä��Ȥ��ϡ�DLL ���饤��ݡ��ȡ�Mesa DLL �ѡ�
283 return FALSE ;
284
285 if (!(glMultiTexCoord2fEXT = (PFNGLMULTITEXCOORD2FEXTPROC)wglGetProcAddress("glMultiTexCoord2fEXT")) &&
286 !(glMultiTexCoord2fEXT = (PFNGLMULTITEXCOORD2FEXTPROC)OpenGLDLLCtrl::openGLDLLCtrl.GetProcAddress("glMultiTexCoord2fEXT")) && // ��Ǽ����Ǥ��ʤ��ä��Ȥ��ϡ�DLL ���饤��ݡ��ȡ�Mesa DLL �ѡ�
287 !(glMultiTexCoord2fEXT = (PFNGLMULTITEXCOORD2FEXTPROC)OpenGLDLLCtrl::openGLDLLCtrl.GetProcAddress("_glMultiTexCoord2fEXT@12"))) // ��Ǽ����Ǥ��ʤ��ä��Ȥ��ϡ�DLL ���饤��ݡ��ȡ�Mesa DLL �ѡ�
288 return FALSE ;
289 #endif // #if defined(WIN32) && !defined(MESA)
290
291 p_glActiveTexture = glSelectTextureEXT ;
292 p_glMultiTexCoord2f = glMultiTexCoord2fEXT ;
293
294 DEF_GL_MAX_TEXTURE_UNITS = GL_MAX_TEXTURES_EXT ;
295
296 DEF_GL_TEXTURE0 = GL_TEXTURE0_EXT ;
297 DEF_GL_TEXTURE1 = GL_TEXTURE1_EXT ;
298 DEF_GL_TEXTURE2 = GL_TEXTURE2_EXT ;
299 DEF_GL_TEXTURE3 = GL_TEXTURE3_EXT ;
300
301 current_MultiTextureInterfaceName = CURRENT_NAME_GL_EXT_multitexture ;
302 current_MultiTextureInterfaceNameString = current_MultiTextureInterfaceName ;
303 return TRUE ;
304
305 #endif // #ifndef GL_EXT_multitexture ... #else
306 }
307
308
309 // ��������
310 // multitexture ���ѻ��κ���ƥ��������˥åȿ�
311 // �����Ȥ� Mesa �ʳ��� SGIS_multitexture �ξ��ϣ�����
312 // IsSupported_*_multitexture() ��̤������ξ�磱
__GetMaxTextureUnits()313 GLint __GetMaxTextureUnits()
314 {
315 if (current_MultiTextureInterfaceNameString == "")
316 {
317 current_maxTextureUnits = 1 ;
318 return current_maxTextureUnits ;
319 }
320
321 #ifndef MESA
322 if (current_MultiTextureInterfaceNameString == CURRENT_NAME_GL_SGIS_multitexture)
323 {
324 current_maxTextureUnits = 2 ; // Mesa �ʳ��� SGIS_multitexture �Ǥϡ�̵���Ȥߤʤ��ʤ��λ����ǽ�����λ��
325 return current_maxTextureUnits ;
326 }
327 #endif // #ifndef MESA
328
329 // ARB_multitexture or EXT_multitexture���⤷���� Mesa �� SGIS_multitexture �ʤ顢
330 // OpenGL �������ƥ��������˥åȿ������
331 glGetIntegerv(GL_MAX_TEXTURE_UNITS, ¤t_maxTextureUnits) ; // �ƥ�������κ����˥åȿ�
332
333 return current_maxTextureUnits ;
334 }
335
336
337 // ���餫�� multitexture �ݡ��Ȥ��뤫
338 // ������ͤ� ���ݡ��Ȥ��� multitexture ��̾�Υݥ��ޤ��� NULL
339 // ͥ����
340 // "OpenGL-1.? Multi-Texture" �ġġġġġġġ� OpenGL �ˤ��ͥ��ƥ��֥��ݡ��ȡ�OpenGL-1.3 �ʹߡ���
341 // "GL_ARB_multitexture"
342 // "GL_EXT_multitexture"
343 // "GL_SGIS_multitexture"
344 // NULL
345 //
346 // ����ѥ���Ķ��� multitexture ���������ݡ��Ȥ���С������ǡ�
347 // ���ġ�����ब�������ݡ��Ȥ��Ƥ��ʤ��С������ξ��
348 // �������˥�Ǥ��ʤ����ᡢ�¹��Բ�ǽ
349 //
350 /* ������
351 char *multitex = IsSupported_multitexture() ;
352 if (multitex)
353 glActiveTexture(GL_TEXTURE0) ;
354 */
IsSupported_multitexture(int flag_ARB,int flag_EXT,int flag_SGIS)355 char *IsSupported_multitexture(int flag_ARB, int flag_EXT, int flag_SGIS)
356 {
357 current_MultiTextureInterfaceName = NULL ;
358
359 #ifdef GL_VERSION_multitexture
360 // ����ѥ��롦�¹ԴĶ������ǡ�multitexture �ݡ��Ȥ���С������ʹߤʤ�
361 if (GetOpenGLVersion() >= GL_VERSION_multitexture_F)
362 current_MultiTextureInterfaceName = CURRENT_NAME_GL_VERSION_multitexture ;
363
364 #endif // #ifdef GL_VERSION_multitexture
365
366 // ARB_multitexture
367 if (!current_MultiTextureInterfaceName && flag_ARB)
368 IsSupported_ARB_multitexture() ;
369
370 // EXT_multitexture
371 if (!current_MultiTextureInterfaceName && flag_EXT)
372 IsSupported_EXT_multitexture() ;
373
374 // SGIS_multitexture
375 if (!current_MultiTextureInterfaceName && flag_SGIS)
376 IsSupported_SGIS_multitexture() ;
377
378 if (current_MultiTextureInterfaceName)
379 current_MultiTextureInterfaceNameString = current_MultiTextureInterfaceName ;
380
381 current_maxTextureUnits = __GetMaxTextureUnits() ;
382
383 return current_MultiTextureInterfaceName ;
384 }
385
386
387 // multitexture coord ����
388 //
389 // target ����ꤹ����ϡ�ɬ��������
390 // IsSupported_multitexture() �ˤ����ѵ�ǽ����Ͽ��ɬ��
391 //
392 // IsSupported_SGIS_multitexture() �ϻ��Ѥ��ʤ������ɤ�
393 // �ޤ���SGIS �Ǥϴ���Ū��
394 // GL_MAX_TEXTURE_UNITS �ϻ����Բġʤ��ʤ餺����˥åȤȤߤʤ��������ɤ���
395 //
396 // target �λ��꤬�ʤ���� glTexCoord2f() ������
TexCoord2f(GLfloat s,GLfloat t,int target)397 void TexCoord2f(GLfloat s, GLfloat t, int target)
398 {
399 #ifdef GL_VERSION_1_1
400 if (target && GL_TEXTURE0)
401 glMultiTexCoord2f((GLenum)((int)GL_TEXTURE0 + target), s, t) ;
402 else
403 glTexCoord2f(s, t) ;
404 #else
405 glTexCoord2f(s, t) ;
406 #endif
407 }
408
409
410 // glVertex3f() ������˥������
411 //
412 // s, t �ˤ���ɸ���꤬ͭ���ʾ��ϡ�
413 // glVetex() ������ glTexCoord2f() ������
414 //
415 // target �����ꤵ�줿��硢
416 // �� target �μ����ƥ��������˥åȤ˥ƥ��������ɸ���å�
417 //
418 // target ����ꤹ����ϡ�������
419 // IsSupported_multitexture() �ˤ����ѵ�ǽ����Ͽ��ɬ��
420 //
421 // IsSupported_SGIS_multitexture() �ϻ��Ѥ��ʤ������ɤ�
422 // �ޤ���SGIS �Ǥϴ���Ū��
423 // GL_MAX_TEXTURE_UNITS �ϻ����Բġʤ��ʤ餺����˥åȤȤߤʤ��������ɤ���
Vertex3fWithTexAxis(GLfloat vx,GLfloat vy,GLfloat vz,GLfloat * s0,GLfloat * t0)424 void Vertex3fWithTexAxis(GLfloat vx, GLfloat vy, GLfloat vz, GLfloat *s0, GLfloat *t0)
425 {
426 Vertex3fWithTexAxis(vx, vy, vz, -1, s0, t0) ;
427 }
428
Vertex3fWithTexAxis(GLfloat vx,GLfloat vy,GLfloat vz,int target0,GLfloat * s0,GLfloat * t0,int target1,GLfloat * s1,GLfloat * t1,int target2,GLfloat * s2,GLfloat * t2,int target3,GLfloat * s3,GLfloat * t3)429 void Vertex3fWithTexAxis(GLfloat vx, GLfloat vy, GLfloat vz,
430 int target0, GLfloat *s0, GLfloat *t0,
431 int target1, GLfloat *s1, GLfloat *t1,
432 int target2, GLfloat *s2, GLfloat *t2,
433 int target3, GLfloat *s3, GLfloat *t3)
434 {
435 // ����
436 static const int MAX_TEX_UNITS = 4 ;
437
438 GLfloat *s[MAX_TEX_UNITS] ;
439 GLfloat *t[MAX_TEX_UNITS] ;
440 int u[MAX_TEX_UNITS] ;
441
442 s[0] = s0 ; t[0] = t0 ; u[0] = target0 ;
443 s[1] = s1 ; t[1] = t1 ; u[1] = target1 ;
444 s[2] = s2 ; t[2] = t2 ; u[2] = target2 ;
445 s[3] = s3 ; t[3] = t3 ; u[3] = target3 ;
446
447 // �ƥƥ��������˥åȤ��Ф��ƥ��������ɸ�å�
448 for (int i = 0 ; i < MAX_TEX_UNITS && i < current_maxTextureUnits ; i ++)
449 {
450 if (s[i] && t[i])
451 {
452 #ifdef GL_VERSION_1_1
453 // OpenGL-1.1 �ʾ�Τ�ͭ��
454 if (u[i] > 0 && GL_TEXTURE0)
455 {
456 /*
457 if ((int)GL_TEXTURE0 + u[i] != 0x84C0 && (int)GL_TEXTURE0 + u[i] != 0x84C1)
458 {
459 DEF_GL_TEXTURE0 = GL_TEXTURE0 ;
460 DEF_GL_TEXTURE1 = GL_TEXTURE1 ;
461 }
462 */
463
464 // �������åȻ��ꤵ��Ƥ�����
465 glMultiTexCoord2f((GLenum)((int)GL_TEXTURE0 + u[i]),
466 s[i][0] * vx + s[i][1] * vy + s[i][2] * vz,
467 t[i][0] * vx + t[i][1] * vy + t[i][2] * vz) ;
468 }
469 else
470 #endif
471 {
472 // �������åȻ��ꤵ��Ƥ��ʤ����⤷���� OpenGL-1.0 �ξ��
473 glTexCoord2f(s[i][0] * vx + s[i][1] * vy + s[i][2] * vz,
474 t[i][0] * vx + t[i][1] * vy + t[i][2] * vz) ;
475
476 if (u[i] < 0)
477 break ;
478 }
479 }
480
481 #ifndef GL_VERSION_1_1
482 // OpenGL-1.0 �ξ��ǽ�Σ��ĤΤ�ͭ��
483 break ;
484 #endif
485 }
486
487 // �Ǹ��ĺ����ɸ���å�
488 glVertex3f(vx, vy, vz) ;
489
490 /*
491 if (GL_TEXTURE0 != 0x84C0 || GL_TEXTURE1 != 0x84C1)
492 {
493 DEF_GL_TEXTURE0 = GL_TEXTURE0 ;
494 DEF_GL_TEXTURE1 = GL_TEXTURE1 ;
495 }
496 */
497 }
498
499
500 // glVertex3fv() ������˥������
501 //
502 // s, t �ˤ���ɸ���꤬ͭ���ʾ��ϡ�
503 // glVetex() ������ glTexCoord2f() ������
504 //
505 // target �����ꤵ�줿��硢
506 // �� target �μ����ƥ��������˥åȤ˥ƥ��������ɸ���å�
507 //
508 // target ����ꤹ����ϡ�������
509 // IsSupported_multitexture() �ˤ����ѵ�ǽ����Ͽ��ɬ��
510 //
511 // IsSupported_SGIS_multitexture() �ϻ��Ѥ��ʤ������ɤ�
512 // �ޤ���SGIS �Ǥϴ���Ū��
513 // GL_MAX_TEXTURE_UNITS �ϻ����Բġʤ��ʤ餺����˥åȤȤߤʤ��������ɤ���
Vertex3fvWithTexAxis(GLfloat v[3],GLfloat * s0,GLfloat * t0)514 void Vertex3fvWithTexAxis(GLfloat v[3], GLfloat *s0, GLfloat *t0)
515 {
516 Vertex3fvWithTexAxis(v, -1, s0, t0) ;
517 }
518
Vertex3fvWithTexAxis(GLfloat v[3],int target0,GLfloat * s0,GLfloat * t0,int target1,GLfloat * s1,GLfloat * t1,int target2,GLfloat * s2,GLfloat * t2,int target3,GLfloat * s3,GLfloat * t3)519 void Vertex3fvWithTexAxis(GLfloat v[3],
520 int target0, GLfloat *s0, GLfloat *t0,
521 int target1, GLfloat *s1, GLfloat *t1,
522 int target2, GLfloat *s2, GLfloat *t2,
523 int target3, GLfloat *s3, GLfloat *t3)
524 {
525 // ����
526 static const int MAX_TEX_UNITS = 4 ;
527
528 GLfloat *s[MAX_TEX_UNITS] ;
529 GLfloat *t[MAX_TEX_UNITS] ;
530 int u[MAX_TEX_UNITS] ;
531
532 s[0] = s0 ; t[0] = t0 ; u[0] = target0 ;
533 s[1] = s1 ; t[1] = t1 ; u[1] = target1 ;
534 s[2] = s2 ; t[2] = t2 ; u[2] = target2 ;
535 s[3] = s3 ; t[3] = t3 ; u[3] = target3 ;
536
537
538 // �ƥƥ��������˥åȤ��Ф��ƥ��������ɸ�å�
539 for (int i = 0 ; i < MAX_TEX_UNITS && i < current_maxTextureUnits ; i ++)
540 {
541 if (s[i] && t[i])
542 {
543 #ifdef GL_VERSION_1_1
544 // OpenGL-1.1 �ʾ�Τ�ͭ��
545 if (u[i] > 0 && GL_TEXTURE0)
546 {
547 /*
548 if ((int)GL_TEXTURE0 + u[i] != 0x84C0 && (int)GL_TEXTURE0 + u[i] != 0x84C1)
549 {
550 DEF_GL_TEXTURE0 = GL_TEXTURE0 ;
551 DEF_GL_TEXTURE1 = GL_TEXTURE1 ;
552 }
553 */
554
555 // �������åȻ��ꤵ��Ƥ�����
556 glMultiTexCoord2f((GLenum)((int)GL_TEXTURE0 + u[i]),
557 s[i][0]*v[0] + s[i][1]*v[1] + s[i][2]*v[2],
558 t[i][0]*v[0] + t[i][1]*v[1] + t[i][2]*v[2]) ;
559 }
560 else
561 #endif
562 {
563 // �������åȻ��ꤵ��Ƥ��ʤ����⤷���� OpenGL-1.0 �ξ��
564 glTexCoord2f(s[i][0]*v[0] + s[i][1]*v[1] + s[i][2]*v[2],
565 t[i][0]*v[0] + t[i][1]*v[1] + t[i][2]*v[2]) ;
566
567 if (u[i] < 0)
568 break ;
569 }
570 }
571
572 #ifndef GL_VERSION_1_1
573 // OpenGL-1.0 �ξ��ǽ�Σ��ĤΤ�ͭ��
574 break ;
575 #endif
576 }
577
578 // �Ǹ��ĺ����ɸ���å�
579 glVertex3fv(v) ;
580
581 /*
582 if (GL_TEXTURE0 != 0x84C0 || GL_TEXTURE1 != 0x84C1)
583 {
584 DEF_GL_TEXTURE0 = GL_TEXTURE0 ;
585 DEF_GL_TEXTURE1 = GL_TEXTURE1 ;
586 }
587 */
588 }
589
590
591 // multitexture ���ѻ��κ���ƥ��������˥åȿ�
592 // �����Ȥ� Mesa �ʳ��� SGIS_multitexture �ξ��ϣ�����
593 // IsSupported_*_multitexture() ��̤������ξ�磱
GetMaxTextureUnits()594 GLint GetMaxTextureUnits()
595 {
596 return current_maxTextureUnits ;
597 }
598
599
600 // multitexture ���ѻ��κ���ƥ��������˥åȿ�
601 // �����Ȥ� Mesa �ʳ��� SGIS_multitexture �ξ��ϣ�����
602 // IsSupported_*_multitexture() ��̤������ξ�磱
603 /*
604 GLint GetMaxTextureUnits()
605 {
606 static String pre_MultiTextureInterfaceName ;
607
608 if (!current_MultiTextureInterfaceName)
609 maxTextureUnits = 1 ;
610
611 if (current_MultiTextureInterfaceNameString == pre_MultiTextureInterfaceName)
612 return maxTextureUnits ;
613
614 // �����˥ޥ���ƥ������㥤�ե������åȤ���Ƥ������
615 // glGet*() �Ǽ���
616 pre_MultiTextureInterfaceName = current_MultiTextureInterfaceNameString ;
617
618 #ifndef MESA
619 if (current_MultiTextureInterfaceNameString == CURRENT_NAME_GL_SGIS_multitexture)
620 {
621 maxTextureUnits = 2 ; // Mesa �ʳ��� SGIS_multitexture �Ǥϡ�̵���Ȥߤʤ��ʤ��λ����ǽ�����λ��
622 return maxTextureUnits ;
623 }
624 #endif // #ifndef MESA
625
626 // ARB_multitexture or EXT_multitexture���⤷���� Mesa �� SGIS_multitexture �ʤ顢
627 // OpenGL �������ƥ��������˥åȿ������
628 glGetIntegerv(GL_MAX_TEXTURE_UNITS, &maxTextureUnits) ; // �ƥ�������κ����˥åȿ�
629
630 return maxTextureUnits ;
631 }
632 */
633
634
635 // anisotropic filtering ���ѻ��κ��� max anisotropy
GetMaxTextureMaxAnisotropy()636 GLfloat GetMaxTextureMaxAnisotropy()
637 {
638 if (current_TextureFilterAnisotropicInterfaceNameString == "")
639 return 1.0f ;
640
641 GLfloat maxTextureMaxAnisotropy ;
642 GLenum errCode = glGetError() ;
643 glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY, &maxTextureMaxAnisotropy) ; // maximum degree of anisotropy
644
645 // for fixing nVIDIA old driver's anisotropic filtering error...
646 // ignore "Invalid Enum" Error
647 errCode = glGetError() ;
648 if (errCode == GL_INVALID_ENUM)
649 maxTextureMaxAnisotropy = 1.0f ;
650
651 return maxTextureMaxAnisotropy ;
652 }
653
654
655 // �ե��������ǥ���
656 // WIN_phong_shading
657 // �ؿ����ɲäϤʤ����ѥ����ɲäΤߤǤ��뤿�ᡢ�����Τߤ��б��� OK
658 //
659 /* ������
660 int phongshade = IsSupported_WIN_phong_shading() ;
661
662 // �ؿ����ɲä��ʤ����� #ifdef ������
663 if (phongshade)
664 glShadeModel(GL_PHONG_WIN) ;
665 */
IsSupported_WIN_phong_shading()666 int IsSupported_WIN_phong_shading()
667 {
668 //#ifndef GL_WIN_phong_shading
669 // return FALSE ;
670 //
671 //#else
672 if (!IsSupported_OpenGLExtension("GL_WIN_phong_shading"))
673 return FALSE ; // WIN_phong_shading not supported
674
675 return TRUE ;
676
677 //#endif // #ifndef GL_WIN_phong_shading ... #else
678 }
679
680
681 // GL_ARB_texture_cube_map ���ݡ��ȥ����å�
682 //
683 /* ������
684 int has_ARB_texture_cube_map = IsSupported_ARB_texture_cube_map() ;
685
686 // �ؿ����ɲä��ʤ����� #ifdef ������
687 if (has_ARB_texture_cube_map)
688 glTexGenf(GL_S, GL_TEXTURE_GEN_MODE, GL_NORMAL_MAP_ARB) ;
689
690 if (has_ARB_texture_cube_map)
691 glTexGenf(GL_S, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP_ARB) ;
692 */
IsSupported_ARB_texture_cube_map()693 int IsSupported_ARB_texture_cube_map()
694 {
695 //#ifndef GL_EXT_texture_cube_map
696 // return FALSE ;
697 //
698 //#else
699 if (!IsSupported_OpenGLExtension(CURRENT_NAME_GL_ARB_texture_cube_map))
700 return FALSE ; // GL_ARB_texture_cube_map not supported
701
702 current_TextureCubeMapInterfaceName = CURRENT_NAME_GL_ARB_texture_cube_map ;
703 current_TextureCubeMapInterfaceNameString = current_TextureCubeMapInterfaceName ;
704
705 current_TexgenReflectionInterfaceName = CURRENT_NAME_GL_ARB_texture_cube_map ;
706 current_TexgenReflectionInterfaceNameString = current_TexgenReflectionInterfaceName ;
707
708 return TRUE ;
709 //#endif // #ifndef GL_ARB_texture_cube_map
710 }
711
712 // GL_EXT_texture_cube_map ���ݡ��ȥ����å�
713 //
714 /* ������
715 int has_EXT_texture_cube_map = IsSupported_EXT_texture_cube_map() ;
716
717 // �ؿ����ɲä��ʤ����� #ifdef ������
718 if (has_EXT_texture_cube_map)
719 glTexGenf(GL_S, GL_TEXTURE_GEN_MODE, GL_NORMAL_MAP_EXT) ;
720
721 if (has_EXT_texture_cube_map)
722 glTexGenf(GL_S, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP_EXT) ;
723 */
IsSupported_EXT_texture_cube_map()724 int IsSupported_EXT_texture_cube_map()
725 {
726 //#ifndef GL_EXT_texture_cube_map
727 // return FALSE ;
728 //
729 //#else
730 if (!IsSupported_OpenGLExtension(CURRENT_NAME_GL_EXT_texture_cube_map))
731 return FALSE ; // GL_EXT_texture_cube_map not supported
732
733 current_TextureCubeMapInterfaceName = CURRENT_NAME_GL_EXT_texture_cube_map ;
734 current_TextureCubeMapInterfaceNameString = current_TextureCubeMapInterfaceName ;
735
736 current_TexgenReflectionInterfaceName = CURRENT_NAME_GL_EXT_texture_cube_map ;
737 current_TexgenReflectionInterfaceNameString = current_TexgenReflectionInterfaceName ;
738
739 return TRUE ;
740 //#endif // #ifndef GL_EXT_texture_cube_map
741 }
742
743
744 // GL_NV_texgen_reflection ���ݡ��ȥ����å�
745 //
746 /* ������
747 int has_NV_texgen_reflection = IsSupported_NV_texgen_reflection() ;
748
749 // �ؿ����ɲä��ʤ����� #ifdef ������
750 if (has_NV_texgen_reflection)
751 glTexGenf(GL_S, GL_TEXTURE_GEN_MODE, GL_NORMAL_MAP_NV) ;
752
753 if (has_NV_texgen_reflection)
754 glTexGenf(GL_S, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP_NV) ;
755 */
IsSupported_NV_texgen_reflection()756 int IsSupported_NV_texgen_reflection()
757 {
758 //#ifndef GL_NV_texgen_reflection
759 // return FALSE ;
760 //
761 //#else
762 if (!IsSupported_OpenGLExtension(CURRENT_NAME_GL_NV_texgen_reflection))
763 return FALSE ; // GL_NV_texgen_reflection not supported
764
765 current_TexgenReflectionInterfaceName = CURRENT_NAME_GL_NV_texgen_reflection ;
766 current_TexgenReflectionInterfaceNameString = current_TexgenReflectionInterfaceName ;
767 return TRUE ;
768 //#endif // #ifndef GL_NV_texgen_reflection
769 }
770
771
772 // texgen_reflection ��Ϣ���ݡ��ȥ����å�
773 // GL_ARB_texture_cube_map �⤷����
774 // GL_EXT_texture_cube_map �⤷����
775 // GL_NV_texgen_reflection �ݡ��Ȥ��Ƥ��뤫
776 //
777 /* ������
778 char *texgen_reflection = IsSupported_texgen_reflection() ;
779
780 // �ؿ����ɲä��ʤ����� #ifdef ������
781 if (texgen_reflection)
782 glTexGenf(GL_S, GL_TEXTURE_GEN_MODE, GL_NORMAL_MAP) ;
783
784 if (texgen_reflection)
785 glTexGenf(GL_S, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP) ;
786 */
IsSupported_texgen_reflection(int flag_ARB_texture_cube_map,int flag_EXT_texture_cube_map,int flag_NV_texgen_reflection)787 char *IsSupported_texgen_reflection(int flag_ARB_texture_cube_map,
788 int flag_EXT_texture_cube_map,
789 int flag_NV_texgen_reflection)
790 {
791 // GL_ARB_texture_cube_map
792 if (flag_ARB_texture_cube_map && IsSupported_ARB_texture_cube_map())
793 return current_TexgenReflectionInterfaceName ;
794
795 // GL_EXT_texture_cube_map
796 if (flag_EXT_texture_cube_map && IsSupported_EXT_texture_cube_map())
797 return current_TexgenReflectionInterfaceName ;
798
799 // GL_NV_texgen_reflection
800 if (flag_NV_texgen_reflection && IsSupported_NV_texgen_reflection())
801 return current_TexgenReflectionInterfaceName ;
802
803 // not supported
804 return NULL ;
805 }
806
807
808 // Separate Specular Color ��Ϣ
809 // ���ͤ�ʬ����ʤ�������α
810 // �������Ǥϡ�OpenGL-1.2 �Υѥ��Τޤ���
811
812 // ARB_separate_specular_color
813 /* ������
814 int has_ARB_separate_specular_color = IsSupported_ARB_separate_specular_color() ;
815
816 // �ؿ����ɲä��ʤ����� #ifdef ������
817 if (has_ARB_separate_specular_color)
818 glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL_ARB, GL_SEPARATE_SPECULAR_COLOR_ARB) ;
819
820 if (has_ARB_separate_specular_color)
821 glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL_ARB, GL_SINGLE_COLOR_ARB) ;
822 */
IsSupported_ARB_separate_specular_color()823 int IsSupported_ARB_separate_specular_color()
824 {
825 //#ifndef GL_ARB_separate_specular_color
826 // return FALSE ;
827 //
828 //#else
829 if (!IsSupported_OpenGLExtension(CURRENT_NAME_GL_ARB_separate_specular_color))
830 return FALSE ; // ARB_separate_specular_color not supported
831
832 current_SeparateSpecularColorInterfaceName = CURRENT_NAME_GL_ARB_separate_specular_color ;
833 current_SeparateSpecularColorInterfaceNameString = current_SeparateSpecularColorInterfaceName ;
834 return TRUE ;
835
836 //#endif // #ifndef GL_ARB_separate_specular_color ... #else
837 }
838
839 // EXT_separate_specular_color
840 /* ������
841 int has_EXT_separate_specular_color = IsSupported_EXT_separate_specular_color() ;
842
843 // �ؿ����ɲä��ʤ����� #ifdef ������
844 if (has_EXT_separate_specular_color)
845 glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL_EXT, GL_SEPARATE_SPECULAR_COLOR_EXT) ;
846
847 if (has_EXT_separate_specular_color)
848 glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL_EXT, GL_SINGLE_COLOR_EXT) ;
849 */
IsSupported_EXT_separate_specular_color()850 int IsSupported_EXT_separate_specular_color()
851 {
852 //#ifndef GL_EXT_separate_specular_color
853 // return FALSE ;
854 //
855 //#else
856 if (!IsSupported_OpenGLExtension(CURRENT_NAME_GL_EXT_separate_specular_color))
857 return FALSE ; // EXT_separate_specular_color not supported
858
859 current_SeparateSpecularColorInterfaceName = CURRENT_NAME_GL_EXT_separate_specular_color ;
860 current_SeparateSpecularColorInterfaceNameString = current_SeparateSpecularColorInterfaceName ;
861 return TRUE ;
862
863 //#endif // #ifndef GL_EXT_separate_specular_color ... #else
864 }
865
866
867 // ���餫�� separate_specular_color �ݡ��Ȥ��뤫
868 // ������ͤ� ���ݡ��Ȥ��� separate_specular_color ��̾�Υݥ��ޤ��� NULL
869 // ͥ����
870 // "OpenGL-1.2 Separate Specular Ccolor" �ġġ� OpenGL �ˤ��ͥ��ƥ��֥��ݡ��ȡ�OpenGL-1.2 �ʹߡ�
871 // "GL_ARB_separate_specular_color"
872 // "GL_EXT_separate_specular_color"
873 // NULL
874 //
875 /* ������
876 char *separate_specular_color = IsSupported_separate_specular_color() ;
877
878 // �ؿ����ɲä��ʤ����� #ifdef ������
879 if (separate_specular_color)
880 glLightModeli(GL_COLOR_LIGHT_MODEL, GL_SEPARATE_SPECULAR_COLOR) ;
881
882 if (separate_specular_color)
883 glLightModeli(GL_COLOR_LIGHT_MODEL, GL_SINGLE_COLOR) ;
884 */
IsSupported_separate_specular_color(int flag_ARB,int flag_EXT)885 char *IsSupported_separate_specular_color(int flag_ARB, int flag_EXT)
886 {
887 //#ifdef GL_VERSION_separate_specular_color // ����ѥ��롦�¹ԴĶ������ǡ�separate_specular_color �ݡ��Ȥ���С������ʹߤʤ�
888
889 // ����ब separate_specular_color �ݡ��Ȥ���С������ʹߤʤ� OK
890 // �ѥ����ɲäΤߤ��ɤ�����
891 if (GetOpenGLVersion() >= GL_VERSION_separate_specular_color_F)
892 {
893 current_SeparateSpecularColorInterfaceName = CURRENT_NAME_GL_VERSION_separate_specular_color ;
894 current_SeparateSpecularColorInterfaceNameString = current_SeparateSpecularColorInterfaceName ;
895 return current_SeparateSpecularColorInterfaceName ;
896 }
897
898 //#endif // #ifdef GL_VERSION_separate_specular_color // ���������
899
900 // ARB_separate_specular_color
901 if (flag_ARB && IsSupported_ARB_separate_specular_color())
902 return current_SeparateSpecularColorInterfaceName ;
903
904 // EXT_separate_specular_color
905 if (flag_EXT && IsSupported_EXT_separate_specular_color())
906 return current_SeparateSpecularColorInterfaceName ;
907
908 // not supported
909 return NULL ;
910 }
911
912
913 // Texture Filter Anisotropic ��Ϣ
914
915 // EXT_texture_filter_anisotropic
916 /* ������
917 int has_EXT_texture_filter_anisotropic = IsSupported_EXT_texture_filter_anisotropic() ;
918
919 // �ؿ����ɲä��ʤ����� #ifdef ������
920 if (has_EXT_texture_filter_anisotropic)
921 {
922 float max_anisotropy ;
923 glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &max_anisotropy) ;
924 glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, max_anisotropy) ;
925 }
926 */
IsSupported_EXT_texture_filter_anisotropic()927 int IsSupported_EXT_texture_filter_anisotropic()
928 {
929 //#ifndef GL_EXT_texture_filter_anisotropic
930 // return FALSE ;
931 //
932 //#else
933 if (!IsSupported_OpenGLExtension(CURRENT_NAME_GL_EXT_texture_filter_anisotropic))
934 return FALSE ; // EXT_texture_filter_anisotropic not supported
935
936 current_TextureFilterAnisotropicInterfaceName = CURRENT_NAME_GL_EXT_texture_filter_anisotropic ;
937 current_TextureFilterAnisotropicInterfaceNameString = current_TextureFilterAnisotropicInterfaceName ;
938 return TRUE ;
939
940 //#endif // #ifndef GL_EXT_texture_filter_anisotropic ... #else
941 }
942
943
944 // ���餫�� texture_filter_anisotropic �ݡ��Ȥ��뤫
945 // ������ͤ� ���ݡ��Ȥ��� texture_filter_anisotropic ��̾�Υݥ��ޤ��� NULL
946 // ͥ����
947 // "OpenGL-1.? Texture Filter Anisotropic" �ġġ� OpenGL �ˤ��ͥ��ƥ��֥��ݡ��ȡ�OpenGL-̤�� �ʹߡ�
948 // "GL_EXT_texture_filter_anisotropic"
949 // NULL
950 //
951 /* ������
952 char *texture_filter_anisotropic = IsSupported_texture_filter_anisotropic() ;
953
954 // �ؿ����ɲä��ʤ����� #ifdef ������
955 if (texture_filter_anisotropic)
956 {
957 float max_anisotropy ;
958 glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY, &max_anisotropy) ;
959 glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY, max_anisotropy) ;
960 }
961 */
IsSupported_texture_filter_anisotropic(int flag_EXT)962 char *IsSupported_texture_filter_anisotropic(int flag_EXT)
963 {
964 //#ifdef GL_VERSION_texture_filter_anisotropic // ����ѥ��롦�¹ԴĶ������ǡ�separate_specular_color �ݡ��Ȥ���С������ʹߤʤ�
965
966 // ����ब texture_filter_anisotropic �ݡ��Ȥ���С������ʹߤʤ� OK
967 // �ѥ����ɲäΤߤ��ɤ�����
968 if (GetOpenGLVersion() >= GL_VERSION_texture_filter_anisotropic_F)
969 {
970 current_TextureFilterAnisotropicInterfaceName = CURRENT_NAME_GL_VERSION_texture_filter_anisotropic ;
971 current_TextureFilterAnisotropicInterfaceNameString = current_TextureFilterAnisotropicInterfaceName ;
972 return current_TextureFilterAnisotropicInterfaceName ;
973 }
974
975 //#endif // #ifdef GL_VERSION_texture_filter_anisotropic // ���������
976
977 // EXT_texture_filter_anisotropic
978 if (flag_EXT && IsSupported_EXT_texture_filter_anisotropic())
979 return current_TextureFilterAnisotropicInterfaceName ;
980
981 // not supported
982 return NULL ;
983 }
984
985
986 // Texture Object ��Ϣ
987
988 // EXT_texture_object
989 /* ������
990 int has_EXT_texture_object = IsSupported_EXT_texture_object() ;
991
992 #ifdef GL_EXT_texture_object
993 if (has_EXT_texture_object)
994 BindTextureEXT(GL_TEXTURE_2D, texture) ;
995 #endif
996 */
IsSupported_EXT_texture_object()997 int IsSupported_EXT_texture_object()
998 {
999 #ifndef GL_EXT_texture_object
1000 return FALSE ;
1001
1002 #else
1003 if (!IsSupported_OpenGLExtension(CURRENT_NAME_GL_EXT_texture_object))
1004 return FALSE ; // GL_EXT_texture_object not supported
1005
1006 // Get proc address (WGL only)
1007 #if defined(WIN32) && !defined(MESA)
1008 if (!(glGenTexturesEXT = (PFNGLGENTEXTURESEXTPROC)wglGetProcAddress("glGenTexturesEXT")) &&
1009 !(glGenTexturesEXT = (PFNGLGENTEXTURESEXTPROC)OpenGLDLLCtrl::openGLDLLCtrl.GetProcAddress("glGenTexturesEXT")) && // ��Ǽ����Ǥ��ʤ��ä��Ȥ��ϡ�DLL ���饤��ݡ��ȡ�Mesa DLL �ѡ�
1010 !(glGenTexturesEXT = (PFNGLGENTEXTURESEXTPROC)OpenGLDLLCtrl::openGLDLLCtrl.GetProcAddress("_glGenTexturesEXT@8"))) // ��Ǽ����Ǥ��ʤ��ä��Ȥ��ϡ�DLL ���饤��ݡ��ȡ�Mesa DLL �ѡ�
1011 return FALSE ;
1012
1013 if (!(glDeleteTexturesEXT = (PFNGLDELETETEXTURESEXTPROC) wglGetProcAddress("glDeleteTexturesEXT")) &&
1014 !(glDeleteTexturesEXT = (PFNGLDELETETEXTURESEXTPROC)OpenGLDLLCtrl::openGLDLLCtrl.GetProcAddress("glDeleteTexturesEXT")) && // ��Ǽ����Ǥ��ʤ��ä��Ȥ��ϡ�DLL ���饤��ݡ��ȡ�Mesa DLL �ѡ�
1015 !(glDeleteTexturesEXT = (PFNGLDELETETEXTURESEXTPROC)OpenGLDLLCtrl::openGLDLLCtrl.GetProcAddress("_glDeleteTexturesEXT@8"))) // ��Ǽ����Ǥ��ʤ��ä��Ȥ��ϡ�DLL ���饤��ݡ��ȡ�Mesa DLL �ѡ�
1016 return FALSE ;
1017
1018 if (!(glBindTextureEXT = (PFNGLBINDTEXTUREEXTPROC)wglGetProcAddress("glBindTextureEXT")) &&
1019 !(glBindTextureEXT = (PFNGLBINDTEXTUREEXTPROC)OpenGLDLLCtrl::openGLDLLCtrl.GetProcAddress("glBindTextureEXT")) && // ��Ǽ����Ǥ��ʤ��ä��Ȥ��ϡ�DLL ���饤��ݡ��ȡ�Mesa DLL �ѡ�
1020 !(glBindTextureEXT = (PFNGLBINDTEXTUREEXTPROC)OpenGLDLLCtrl::openGLDLLCtrl.GetProcAddress("_glBindTextureEXT@8"))) // ��Ǽ����Ǥ��ʤ��ä��Ȥ��ϡ�DLL ���饤��ݡ��ȡ�Mesa DLL �ѡ�
1021 return FALSE ;
1022
1023 if (!(glIsTextureEXT = (PFNGLISTEXTUREEXTPROC)wglGetProcAddress("glIsTextureEXT")) &&
1024 !(glIsTextureEXT = (PFNGLISTEXTUREEXTPROC)OpenGLDLLCtrl::openGLDLLCtrl.GetProcAddress("glIsTextureEXT")) && // ��Ǽ����Ǥ��ʤ��ä��Ȥ��ϡ�DLL ���饤��ݡ��ȡ�Mesa DLL �ѡ�
1025 !(glIsTextureEXT = (PFNGLISTEXTUREEXTPROC)OpenGLDLLCtrl::openGLDLLCtrl.GetProcAddress("_glIsTextureEXT@4"))) // ��Ǽ����Ǥ��ʤ��ä��Ȥ��ϡ�DLL ���饤��ݡ��ȡ�Mesa DLL �ѡ�
1026 return FALSE ;
1027 #endif // #if defined(WIN32) && !defined(MESA)
1028
1029 p_glGenTextures = glGenTexturesEXT ;
1030 p_glDeleteTextures = glDeleteTexturesEXT ;
1031 p_glBindTexture = glBindTextureEXT ;
1032 p_glIsTexture = glIsTextureEXT ;
1033
1034 current_TextureObjectInterfaceName = CURRENT_NAME_GL_EXT_texture_object ;
1035 current_TextureObjectInterfaceNameString = current_TextureObjectInterfaceName ;
1036 return TRUE ;
1037
1038 #endif // #ifndef GL_EXT_texture_object ... #else
1039 }
1040
1041
1042 // ���餫�� texture_object �ݡ��Ȥ��뤫
1043 // ������ͤ� ���ݡ��Ȥ��� texture_object ��̾�Υݥ��ޤ��� NULL
1044 // ͥ����
1045 // "OpenGL-1.1 Texture Object" �ġġ� OpenGL �ˤ��ͥ��ƥ��֥��ݡ��ȡ�OpenGL-1.1 �ʹߡ�
1046 // "GL_EXT_texture_object"
1047 // NULL
1048 //
1049 /* ������
1050 char *texture_object = IsSupported_texture_object() ;
1051
1052 if (texture_object)
1053 glBindTexture(GL_TEXTURE_2D, texture) ;
1054 */
IsSupported_texture_object(int flag_EXT)1055 char *IsSupported_texture_object(int flag_EXT)
1056 {
1057 #ifdef GL_VERSION_texture_object
1058 // ����ѥ��롦�¹ԴĶ������ǡ�texture_object �ݡ��Ȥ���С������ʹߤʤ�
1059 if (GetOpenGLVersion() >= GL_VERSION_texture_object_F)
1060 {
1061 current_TextureObjectInterfaceName = CURRENT_NAME_GL_VERSION_texture_object ;
1062 current_TextureObjectInterfaceNameString = current_TextureObjectInterfaceName ;
1063 return current_TextureObjectInterfaceName ;
1064 }
1065
1066 #endif // #ifdef GL_VERSION_separate_specular_color
1067
1068 // EXT_texture_object
1069 if (flag_EXT && IsSupported_EXT_texture_object())
1070 return current_TextureObjectInterfaceName ;
1071
1072 // not supported
1073 return NULL ;
1074 }
1075
1076
1077 // Polygon Offset ��Ϣ
1078
1079 // EXT_polygon_offset
1080 /* ������
1081 int has_EXT_polygon_offset = IsSupported_EXT_polygon_offset() ;
1082
1083 #ifdef GL_EXT_polygon_offset
1084 if (has_EXT_polygon_offset)
1085 {
1086 glPolygonOffset(units, bias) ;
1087 glEnable(GL_POLYGON_OFFSET_EXT) ;
1088
1089 glGetFloatv(GL_POLYGON_OFFSET_FACTOR_EXT, &facter) ;
1090 glGetFloatv(GL_POLYGON_OFFSET_BIAS_EXT, &bias) ;
1091 }
1092 #endif
1093 */
IsSupported_EXT_polygon_offset()1094 int IsSupported_EXT_polygon_offset()
1095 {
1096 #ifndef GL_EXT_polygon_offset
1097 return FALSE ;
1098
1099 #else
1100 if (!IsSupported_OpenGLExtension(CURRENT_NAME_GL_EXT_texture_object))
1101 return FALSE ; // GL_EXT_polygon_offset not supported
1102
1103 // Get proc address (WGL only)
1104 #if defined(WIN32) && !defined(MESA)
1105 if (!(glPolygonOffset = (PFNGLPOLYGONOFFSETEXTPROC)wglGetProcAddress("glPolygonOffsetEXT")) &&
1106 !(glPolygonOffset = (PFNGLPOLYGONOFFSETEXTPROC)OpenGLDLLCtrl::openGLDLLCtrl.GetProcAddress("glPolygonOffsetEXT")) && // ��Ǽ����Ǥ��ʤ��ä��Ȥ��ϡ�DLL ���饤��ݡ��ȡ�Mesa DLL �ѡ�
1107 !(glPolygonOffset = (PFNGLPOLYGONOFFSETEXTPROC)OpenGLDLLCtrl::openGLDLLCtrl.GetProcAddress("_glPolygonOffsetEXT@8"))) // ��Ǽ����Ǥ��ʤ��ä��Ȥ��ϡ�DLL ���饤��ݡ��ȡ�Mesa DLL �ѡ�
1108 return FALSE ;
1109 #endif // #if defined(WIN32) && !defined(MESA)
1110
1111 p_glPolygonOffset = glPolygonOffset ;
1112
1113 DEF_GL_POLYGON_OFFSET_POINT = GL_POLYGON_OFFSET_EXT ; // EXT_polygon_offset �Ǥϡ����٤ƶ��̡�ͭ���ʤΤ� FILL �Τߡ���
1114 DEF_GL_POLYGON_OFFSET_LINE = GL_POLYGON_OFFSET_EXT ;
1115 DEF_GL_POLYGON_OFFSET_FILL = GL_POLYGON_OFFSET_EXT ;
1116 DEF_GL_POLYGON_OFFSET_FACTOR = GL_POLYGON_OFFSET_FACTOR_EXT ;
1117 DEF_GL_POLYGON_OFFSET_UNITS = GL_POLYGON_OFFSET_BIAS_EXT ;
1118
1119 current_PolygonOffsetInterfaceName = CURRENT_NAME_GL_EXT_polygon_offset ;
1120 current_PolygonOffsetInterfaceNameString = current_PolygonOffsetInterfaceName ;
1121 return TRUE ;
1122
1123 #endif // #ifndef GL_EXT_polygon_offset ... #else
1124 }
1125
1126
1127 // ���餫�� polygon_offset �ݡ��Ȥ��뤫
1128 // ������ͤ� ���ݡ��Ȥ��� polygon_offset ��̾�Υݥ��ޤ��� NULL
1129 // ͥ����
1130 // "OpenGL-1.1 Polygon Offset" �ġġ� OpenGL �ˤ��ͥ��ƥ��֥��ݡ��ȡ�OpenGL-1.1 �ʹߡ�
1131 // "GL_EXT_polygon_offset"
1132 // NULL
1133 //
1134 /* ������
1135 char *polygon_offset = IsSupported_polygon_offset() ;
1136
1137 if (polygon_offset)
1138 {
1139 glPolygonOffset(facter, units) ;
1140 glEnable(GL_POLYGON_OFFSET_FILL) ; // EXT_polygon_offset �ξ�� POINT, LINE �ⶦ��
1141
1142 glGetFloatv(GL_POLYGON_OFFSET_FACTOR, &facter) ;
1143 glGetFloatv(GL_POLYGON_OFFSET_UNITS, &units) ;
1144 }
1145 */
IsSupported_polygon_offset(int flag_EXT)1146 char *IsSupported_polygon_offset(int flag_EXT)
1147 {
1148 #ifdef GL_VERSION_polygon_offset
1149 // ����ѥ��롦�¹ԴĶ������ǡ�polygon_offset �ݡ��Ȥ���С������ʹߤʤ�
1150 if (GetOpenGLVersion() >= GL_VERSION_polygon_offset_F)
1151 {
1152 current_PolygonOffsetInterfaceName = CURRENT_NAME_GL_VERSION_polygon_offset ;
1153 current_PolygonOffsetInterfaceNameString = current_PolygonOffsetInterfaceName ;
1154 return current_PolygonOffsetInterfaceName ;
1155 }
1156
1157 #endif // #ifdef GL_VERSION_separate_specular_color
1158
1159 // EXT_polygon_offset
1160 if (flag_EXT && IsSupported_EXT_polygon_offset())
1161 return current_PolygonOffsetInterfaceName ;
1162
1163 // not supported
1164 return NULL ;
1165 }
1166
1167
1168
1169 // Texture Compression Enum ��Ϣ
1170
1171 // GL_ARB_texture_compression
1172 /* ������
1173 int hasEnum_ARB_texture_compression = IsSupportedEnum_ARB_texture_compression() ;
1174
1175 // �ؿ����ɲä��ʤ����� #ifdef ������
1176 if (hasEnum_ARB_texture_compression)
1177 {
1178 glTexImage2D( ..., GL_COMPRESSED_RGB_ARB, ...) ;
1179 }
1180 */
IsSupported_ARB_texture_compression_Enum()1181 int IsSupported_ARB_texture_compression_Enum()
1182 {
1183 //#ifndef GL_ARB_texture_compression
1184 // return FALSE ;
1185 //
1186 //#else
1187 if (!IsSupported_OpenGLExtension(CURRENT_NAME_GL_ARB_texture_compression))
1188 return FALSE ; // GL_ARB_texture_compression not supported
1189
1190 current_TextureCompressionInterfaceEnumName = CURRENT_NAME_GL_ARB_texture_compression ;
1191 current_TextureCompressionInterfaceEnumNameString = current_TextureCompressionInterfaceEnumName ;
1192 return TRUE ;
1193
1194 //#endif // #ifndef GL_ARB_texture_compression ... #else
1195 }
1196
1197
1198 // ���餫�� texture_compression �ݡ��Ȥ��뤫
1199 // ������ͤ� ���ݡ��Ȥ��� texture_compression ��̾�Υݥ��ޤ��� NULL
1200 // ͥ����
1201 // "OpenGL-1.? Texture Compression" �ġġ� OpenGL �ˤ��ͥ��ƥ��֥��ݡ��ȡ�OpenGL-̤�� �ʹߡ�
1202 // "GL_ARB_texture_compression"
1203 // NULL
1204 //
1205 /* ������
1206 char *enum_texture_compression = IsSupportedEnum_texture_compression() ;
1207
1208 // �ؿ����ɲä��ʤ����� #ifdef ������
1209 if (enum_texture_compression)
1210 {
1211 glTexImage2D( ..., GL_COMPRESSED_RGB, ...) ;
1212 }
1213 */
IsSupported_texture_compression_Enum(int flag_ARB)1214 char *IsSupported_texture_compression_Enum(int flag_ARB)
1215 {
1216 //#ifdef GL_VERSION_texture_compression // ����ѥ��롦�¹ԴĶ������ǡ�texture_compression �ݡ��Ȥ���С������ʹߤʤ�
1217
1218 // ����ब texture_compression �ݡ��Ȥ���С������ʹߤʤ� OK
1219 // �ѥ����ɲäΤߤ��ɤ�����
1220 if (GetOpenGLVersion() >= GL_VERSION_texture_compression_F)
1221 {
1222 current_TextureCompressionInterfaceEnumName = CURRENT_NAME_GL_VERSION_texture_compression ;
1223 current_TextureCompressionInterfaceEnumNameString = current_TextureCompressionInterfaceEnumName ;
1224 return current_TextureCompressionInterfaceEnumName ;
1225 }
1226
1227 //#endif // #ifdef GL_VERSION_texture_compression // ���������
1228
1229 // ARB_texture_compression
1230 if (flag_ARB && IsSupported_ARB_texture_compression_Enum())
1231 return current_TextureCompressionInterfaceEnumName ;
1232
1233 // not supported
1234 return NULL ;
1235 }
1236
1237
1238 // Texture Compression S3TC ��Ϣ
1239
1240 // GL_EXT_texture_compression_s3tc
1241 /* ������
1242 int has_EXT_texture_compression_s3tc = IsSupported_EXT_texture_compression_s3tc() ;
1243
1244 // �ؿ����ɲä��ʤ����� #ifdef ������
1245 if (has_EXT_texture_compression_s3tc)
1246 {
1247 glTexImage2D( ..., GL_COMPRESSED_RGB_S3TC_DXT1_EXT, ...) ;
1248 }
1249 */
IsSupported_EXT_texture_compression_s3tc()1250 int IsSupported_EXT_texture_compression_s3tc()
1251 {
1252 //#ifndef GL_EXT_texture_compression_s3tc
1253 // return FALSE ;
1254 //
1255 //#else
1256 // GL_ARB_texture_compression ɬ��
1257 // GL_ARB_texture_compression ɬ��
1258 if (!IsSupported_OpenGLExtension(CURRENT_NAME_GL_ARB_texture_compression) ||
1259 !IsSupported_OpenGLExtension(CURRENT_NAME_GL_EXT_texture_compression_s3tc))
1260 return FALSE ; // GL_EXT_texture_compression_s3tc not supported
1261
1262 current_TextureCompressionS3TCInterfaceName = CURRENT_NAME_GL_EXT_texture_compression_s3tc ;
1263 current_TextureCompressionS3TCInterfaceNameString = current_TextureCompressionS3TCInterfaceName ;
1264 return TRUE ;
1265
1266 //#endif // #ifndef GL_EXT_texture_compression_s3tc ... #else
1267 }
1268
1269
1270 // ���餫�� texture_compression_s3tc �ݡ��Ȥ��뤫
1271 // ������ͤ� ���ݡ��Ȥ��� texture_compression_s3tc ��̾�Υݥ��ޤ��� NULL
1272 // ͥ����
1273 // "OpenGL-1.? Texture Compression S3TC" �ġġ� OpenGL �ˤ��ͥ��ƥ��֥��ݡ��ȡʤ�������ʤ�����
1274 // "GL_EXT_texture_compression_s3tc"
1275 // NULL
1276 //
1277 /* ������
1278 char *texture_compression_S3TC = IsSupported_texture_compression_s3tc() ;
1279
1280 // �ؿ����ɲä��ʤ����� #ifdef ������
1281 if (texture_compression_S3TC)
1282 {
1283 glTexImage2D( ..., GL_COMPRESSED_RGB_S3TC_DXT1, ...) ;
1284 }
1285 */
IsSupported_texture_compression_s3tc(int flag_EXT)1286 char *IsSupported_texture_compression_s3tc(int flag_EXT)
1287 {
1288 // ����ब texture_compression_s3tc �ݡ��Ȥ���С������ʹߤʤ� OK
1289 // �ѥ����ɲäΤߤ��ɤ�����
1290 if (GetOpenGLVersion() >= GL_VERSION_texture_compression_s3tc_F)
1291 {
1292 current_TextureCompressionS3TCInterfaceName = CURRENT_NAME_GL_VERSION_texture_compression_s3tc ;
1293 current_TextureCompressionS3TCInterfaceNameString = current_TextureCompressionS3TCInterfaceName ;
1294 return current_TextureCompressionS3TCInterfaceName ;
1295 }
1296
1297 // EXT_texture_compression_s3tc
1298 if (flag_EXT && IsSupported_EXT_texture_compression_s3tc())
1299 return current_TextureCompressionS3TCInterfaceName ;
1300
1301 // not supported
1302 return NULL ;
1303 }
1304
1305
1306 // Texture Compression FXT1 ��Ϣ
1307
1308 // GL_3DFX_texture_compression_FXT1
1309 /* ������
1310 int has_3DFX_texture_compression_FXT1 = IsSupported_3DFX_texture_compression_FXT1() ;
1311
1312 // �ؿ����ɲä��ʤ����� #ifdef ������
1313 if (has_3DFX_texture_compression_FXT1)
1314 {
1315 glTexImage2D( ..., GL_COMPRESSED_RGB_FXT1_3DFX, ...) ;
1316 }
1317 */
IsSupported_3DFX_texture_compression_FXT1()1318 int IsSupported_3DFX_texture_compression_FXT1()
1319 {
1320 //#ifndef GL_3DFX_texture_compression_FXT1
1321 // return FALSE ;
1322 //
1323 //#else
1324 // GL_ARB_texture_compression ɬ��
1325 if (!IsSupported_OpenGLExtension(CURRENT_NAME_GL_ARB_texture_compression) ||
1326 !IsSupported_OpenGLExtension(CURRENT_NAME_GL_3DFX_texture_compression_FXT1))
1327 return FALSE ; // GL_EXT_texture_compression_s3tc not supported
1328
1329 current_TextureCompressionFXT1InterfaceName = CURRENT_NAME_GL_3DFX_texture_compression_FXT1 ;
1330 current_TextureCompressionFXT1InterfaceNameString = current_TextureCompressionFXT1InterfaceName ;
1331 return TRUE ;
1332
1333 //#endif // #ifndef GL_3DFX_texture_compression_FXT1 ... #else
1334 }
1335
1336
1337 // ���餫�� texture_compression_FXT1 �ݡ��Ȥ��뤫
1338 // ������ͤ� ���ݡ��Ȥ��� texture_compression_FXT1 ��̾�Υݥ��ޤ��� NULL
1339 // ͥ����
1340 // "OpenGL-1.? Texture Compression FXT1" �ġġ� OpenGL �ˤ��ͥ��ƥ��֥��ݡ��ȡʤ�������ʤ�����
1341 // "GL_3DFX_texture_compression_FXT1"
1342 // NULL
1343 //
1344 /* ������
1345 char *texture_compression_FXT1 = IsSupported_texture_compression_FXT1() ;
1346
1347 // �ؿ����ɲä��ʤ����� #ifdef ������
1348 if (texture_compression_FXT1)
1349 {
1350 glTexImage2D( ..., GL_COMPRESSED_RGB_FXT1, ...) ;
1351 }
1352 */
IsSupported_texture_compression_FXT1(int flag_3DFX)1353 char *IsSupported_texture_compression_FXT1(int flag_3DFX)
1354 {
1355 // ����ब texture_compression_FXT1 �ݡ��Ȥ���С������ʹߤʤ� OK
1356 // �ѥ����ɲäΤߤ��ɤ�����
1357 if (GetOpenGLVersion() >= GL_VERSION_texture_compression_FXT1_F)
1358 {
1359 current_TextureCompressionFXT1InterfaceName = CURRENT_NAME_GL_VERSION_texture_compression_FXT1 ;
1360 current_TextureCompressionFXT1InterfaceNameString = current_TextureCompressionFXT1InterfaceName ;
1361 return current_TextureCompressionFXT1InterfaceName ;
1362 }
1363
1364 // 3DFX_texture_compression_FXT1
1365 if (flag_3DFX && IsSupported_3DFX_texture_compression_FXT1())
1366 return current_TextureCompressionFXT1InterfaceName ;
1367
1368 // not supported
1369 return NULL ;
1370 }
1371
1372
1373
1374 // ����ͭ���ˤʤäƤ������祤�ե�����
CurrentInterface_multitexture()1375 String CurrentInterface_multitexture()
1376 {
1377 return current_MultiTextureInterfaceNameString ;
1378 }
1379
CurrentInterface_separate_specular_color()1380 String CurrentInterface_separate_specular_color()
1381 {
1382 return current_SeparateSpecularColorInterfaceNameString ;
1383 }
1384
CurrentInterface_texture_object()1385 String CurrentInterface_texture_object()
1386 {
1387 return current_TextureObjectInterfaceNameString ;
1388 }
1389
CurrentInterface_polygon_offset()1390 String CurrentInterface_polygon_offset()
1391 {
1392 return current_PolygonOffsetInterfaceNameString ;
1393 }
1394
CurrentInterface_texture_cube_map()1395 String CurrentInterface_texture_cube_map()
1396 {
1397 return current_TextureCubeMapInterfaceNameString ;
1398 }
1399
CurrentInterface_texgen_reflection()1400 String CurrentInterface_texgen_reflection()
1401 {
1402 return current_TexgenReflectionInterfaceNameString ;
1403 }
1404
CurrentInterfaceEnum_texture_compression()1405 String CurrentInterfaceEnum_texture_compression()
1406 {
1407 return current_TextureCompressionInterfaceEnumNameString ;
1408 }
1409
CurrentInterface_texture_compression_s3tc()1410 String CurrentInterface_texture_compression_s3tc()
1411 {
1412 return current_TextureCompressionS3TCInterfaceNameString ;
1413 }
1414
1415
1416 // Texture Internal Formats
1417 // Default: 3
InternalFormat(String str)1418 GLint InternalFormat(String str)
1419 {
1420 GLint format ;
1421
1422 format = (int)(str.Character(1) - '0') ;
1423 if (format < 0 || format > 4)
1424 format = 0 ;
1425
1426 str.Upper() ;
1427 if (!format && Left(str, 3) != "GL_")
1428 str = "GL_" + str ;
1429
1430 // "_ALPHA" ���ʤ� "_A" ������ "RGB" ��̵�����
1431 // !"RGB" �ϡ� RGB5_A1 ����ȿ�������ʤ���
1432 if (!(str / "_ALPHA") && (str / "_A") && !(str / "RGB"))
1433 str.ReplaceString("_A", "_ALPHA") ;
1434
1435 if (!(str / "_LUMINANCE")) str.ReplaceString("_L", "_LUMINANCE") ;
1436 if (!(str / "_INTENSITY")) str.ReplaceString("_I", "_INTENSITY") ;
1437 if (!(str / "_COMPRESSED")) str.ReplaceString("_C", "_COMPRESSED") ;
1438
1439 if (GetOpenGLVersion() >= 1.1f)
1440 {
1441 format = GL_RGB ; // default internal format = GL_RGB
1442
1443 // Is texture_compression available
1444 if (current_TextureCompressionInterfaceEnumName)
1445 {
1446 // Is texture_compression_s3tc available
1447 if (current_TextureCompressionS3TCInterfaceName)
1448 {
1449 if (str / "GL_COMPRESSED_RGB_S3TC_DXT1") format = GL_COMPRESSED_RGB_S3TC_DXT1 ;
1450 else if (str / "GL_COMPRESSED_RGBA_S3TC_DXT1") format = GL_COMPRESSED_RGBA_S3TC_DXT1 ;
1451 else if (str / "GL_COMPRESSED_RGBA_S3TC_DXT3") format = GL_COMPRESSED_RGBA_S3TC_DXT3 ;
1452 else if (str / "GL_COMPRESSED_RGBA_S3TC_DXT5") format = GL_COMPRESSED_RGBA_S3TC_DXT5 ;
1453 }
1454 else
1455 {
1456 if (str / "GL_COMPRESSED_RGB_S3TC_DXT1") format = GL_COMPRESSED_RGB ;
1457 else if (str / "GL_COMPRESSED_RGBA_S3TC_DXT") format = GL_COMPRESSED_RGBA ; // RGBA_DXT?
1458 // else if (str / "GL_COMPRESSED_RGBA_S3TC_DXT1") format = GL_COMPRESSED_RGBA ;
1459 // else if (str / "GL_COMPRESSED_RGBA_S3TC_DXT3") format = GL_COMPRESSED_RGBA ;
1460 // else if (str / "GL_COMPRESSED_RGBA_S3TC_DXT5") format = GL_COMPRESSED_RGBA ;
1461 }
1462
1463 // Is texture_compression_FXT1 available
1464 if (current_TextureCompressionFXT1InterfaceName)
1465 {
1466 if (str / "GL_COMPRESSED_RGB_FXT1") format = GL_COMPRESSED_RGB_FXT1 ;
1467 else if (str / "GL_COMPRESSED_RGBA_FXT1") format = GL_COMPRESSED_RGBA_FXT1 ;
1468 }
1469 else
1470 {
1471 if (str / "GL_COMPRESSED_RGB_FXT1") format = GL_COMPRESSED_RGB ;
1472 else if (str / "GL_COMPRESSED_RGBA_FXT1") format = GL_COMPRESSED_RGBA ;
1473 }
1474
1475 if (str == "GL_COMPRESSED_ALPHA" || str == "GL_COMPRESSED_ALPHA_ARB") format = GL_COMPRESSED_ALPHA ;
1476 else if (str == "GL_COMPRESSED_LUMINANCE" || str == "GL_COMPRESSED_LUMINANCE_ARB") format = GL_COMPRESSED_LUMINANCE ;
1477 else if (str == "GL_COMPRESSED_LUMINANCE_ALPHA" || str == "GL_COMPRESSED_LUMINANCE_ALPHA_ARB") format = GL_COMPRESSED_LUMINANCE_ALPHA ;
1478 else if (str == "GL_COMPRESSED_INTENSITY" || str == "GL_COMPRESSED_INTENSITY_ARB") format = GL_COMPRESSED_INTENSITY ;
1479 else if (str == "GL_COMPRESSED_RGB" || str == "GL_COMPRESSED_RGB_ARB") format = GL_COMPRESSED_RGB ;
1480 else if (str == "GL_COMPRESSED_RGBA" || str == "GL_COMPRESSED_RGBA_ARB") format = GL_COMPRESSED_RGBA ;
1481 }
1482 else
1483 {
1484 if (str / "GL_COMPRESSED_ALPHA") format = GL_ALPHA ;
1485 else if (str / "GL_COMPRESSED_LUMINANCE") format = GL_LUMINANCE ;
1486 else if (str / "GL_COMPRESSED_LUMINANCE_ALPHA") format = GL_LUMINANCE_ALPHA ;
1487 else if (str / "GL_COMPRESSED_INTENSITY") format = GL_INTENSITY ;
1488 else if (str / "GL_COMPRESSED_RGB") format = GL_RGB ;
1489 else if (str / "GL_COMPRESSED_RGBA") format = GL_RGBA ;
1490 }
1491
1492 if (str == "GL_ALPHA") format = GL_ALPHA ;
1493 else if (str == "GL_ALPHA4") format = GL_ALPHA4 ;
1494 else if (str == "GL_ALPHA8") format = GL_ALPHA8 ;
1495 else if (str == "GL_ALPHA12") format = GL_ALPHA12 ;
1496 else if (str == "GL_ALPHA16") format = GL_ALPHA16 ;
1497
1498 else if (str == "1") format = 1 ;
1499 else if (str == "GL_LUMINANCE") format = GL_LUMINANCE ;
1500 else if (str == "GL_LUMINANCE4") format = GL_LUMINANCE4 ;
1501 else if (str == "GL_LUMINANCE8") format = GL_LUMINANCE8 ;
1502 else if (str == "GL_LUMINANCE12") format = GL_LUMINANCE12 ;
1503 else if (str == "GL_LUMINANCE16") format = GL_LUMINANCE16 ;
1504
1505 else if (str == "2") format = 2 ;
1506 else if (str == "GL_LUMINANCE_ALPHA") format = GL_LUMINANCE_ALPHA ;
1507 else if (str == "GL_LUMINANCE4_ALPHA4") format = GL_LUMINANCE4_ALPHA4 ;
1508 else if (str == "GL_LUMINANCE6_ALPHA2") format = GL_LUMINANCE6_ALPHA2 ;
1509 else if (str == "GL_LUMINANCE8_ALPHA8") format = GL_LUMINANCE8_ALPHA8 ;
1510 else if (str == "GL_LUMINANCE12_ALPHA4") format = GL_LUMINANCE12_ALPHA4 ;
1511 else if (str == "GL_LUMINANCE12_ALPHA12") format = GL_LUMINANCE12_ALPHA12 ;
1512 else if (str == "GL_LUMINANCE16_ALPHA16") format = GL_LUMINANCE16_ALPHA16 ;
1513
1514 else if (str == "GL_INTENSITY") format = GL_INTENSITY ;
1515 else if (str == "GL_INTENSITY4") format = GL_INTENSITY4 ;
1516 else if (str == "GL_INTENSITY8") format = GL_INTENSITY8 ;
1517 else if (str == "GL_INTENSITY12") format = GL_INTENSITY12 ;
1518 else if (str == "GL_INTENSITY16") format = GL_INTENSITY16 ;
1519
1520 else if (str == "3") format = 3 ;
1521 else if (str == "GL_RGB") format = GL_RGB ;
1522 else if (str == "GL_R3_G3_B2") format = GL_R3_G3_B2 ;
1523 else if (str == "GL_RGB4") format = GL_RGB4 ;
1524 else if (str == "GL_RGB5") format = GL_RGB5 ;
1525 else if (str == "GL_RGB8") format = GL_RGB8 ;
1526 else if (str == "GL_RGB10") format = GL_RGB10 ;
1527 else if (str == "GL_RGB12") format = GL_RGB12 ;
1528 else if (str == "GL_RGB16") format = GL_RGB16 ;
1529
1530 else if (str == "4") format = 4 ;
1531 else if (str == "GL_RGBA") format = GL_RGBA ;
1532 else if (str == "GL_RGBA2") format = GL_RGBA2 ;
1533 else if (str == "GL_RGBA4") format = GL_RGBA4 ;
1534 else if (str == "GL_RGB5_A1") format = GL_RGB5_A1 ;
1535 else if (str == "GL_RGBA8") format = GL_RGBA8 ;
1536 else if (str == "GL_RGB10_A2") format = GL_RGB10_A2 ;
1537 else if (str == "GL_RGBA12") format = GL_RGBA12 ;
1538 else if (str == "GL_RGBA16") format = GL_RGBA16 ;
1539 }
1540 else
1541 {
1542 format = 3 ; // default component = 3 (GL_RGB)
1543
1544 if (str == "1") format = 1 ;
1545 else if (str == "GL_LUMINANCE") format = 1 ;
1546 else if (str == "GL_LUMINANCE4") format = 1 ;
1547 else if (str == "GL_LUMINANCE8") format = 1 ;
1548 else if (str == "GL_LUMINANCE12") format = 1 ;
1549 else if (str == "GL_LUMINANCE16") format = 1 ;
1550
1551 else if (str == "2") format = 2 ;
1552 else if (str == "GL_LUMINANCE_ALPHA") format = 2 ;
1553 else if (str == "GL_LUMINANCE4_ALPHA4") format = 2 ;
1554 else if (str == "GL_LUMINANCE6_ALPHA2") format = 2 ;
1555 else if (str == "GL_LUMINANCE8_ALPHA8") format = 2 ;
1556 else if (str == "GL_LUMINANCE12_ALPHA4") format = 2 ;
1557 else if (str == "GL_LUMINANCE12_ALPHA12") format = 2 ;
1558 else if (str == "GL_LUMINANCE16_ALPHA16") format = 2 ;
1559
1560 else if (str == "3") format = 3 ;
1561 else if (str == "GL_RGB") format = 3 ;
1562 else if (str == "GL_R3_G3_B2") format = 3 ;
1563 else if (str == "GL_RGB4") format = 3 ;
1564 else if (str == "GL_RGB5") format = 3 ;
1565 else if (str == "GL_RGB8") format = 3 ;
1566 else if (str == "GL_RGB10") format = 3 ;
1567 else if (str == "GL_RGB12") format = 3 ;
1568 else if (str == "GL_RGB16") format = 3 ;
1569
1570 else if (str == "4") format = 4 ;
1571 else if (str == "GL_RGBA") format = 4 ;
1572 else if (str == "GL_RGBA2") format = 4 ;
1573 else if (str == "GL_RGBA4") format = 4 ;
1574 else if (str == "GL_RGB5_A1") format = 4 ;
1575 else if (str == "GL_RGBA8") format = 4 ;
1576 else if (str == "GL_RGB10_A2") format = 4 ;
1577 else if (str == "GL_RGBA12") format = 4 ;
1578 else if (str == "GL_RGBA16") format = 4 ;
1579 }
1580
1581 return format ;
1582 }
1583
1584
InternalFormatString(GLint internalFormat)1585 String InternalFormatString(GLint internalFormat)
1586 {
1587 String str ;
1588
1589 switch (internalFormat)
1590 {
1591 case 1: str = "1 component (GL_LUMINANCE)" ; break ;
1592 case 2: str = "2 components (GL_LUMINANCE_ALPHA)" ; break ;
1593 case 3: str = "3 components (GL_RGB)" ; break ;
1594 case 4: str = "4 components (GL_RGBA)" ; break ;
1595
1596 case GL_ALPHA: str = "GL_ALPHA" ; break ;
1597 case GL_ALPHA4: str = "GL_ALPHA4" ; break ;
1598 case GL_ALPHA8: str = "GL_ALPHA8" ; break ;
1599 case GL_ALPHA12: str = "GL_ALPHA12" ; break ;
1600 case GL_ALPHA16: str = "GL_ALPHA16" ; break ;
1601
1602 case GL_LUMINANCE: str = "GL_LUMINANCE" ; break ;
1603 case GL_LUMINANCE4: str = "GL_LUMINANCE4" ; break ;
1604 case GL_LUMINANCE8: str = "GL_LUMINANCE8" ; break ;
1605 case GL_LUMINANCE12: str = "GL_LUMINANCE12" ; break ;
1606 case GL_LUMINANCE16: str = "GL_LUMINANCE16" ; break ;
1607
1608 case GL_LUMINANCE_ALPHA: str = "GL_LUMINANCE_ALPHA" ; break ;
1609 case GL_LUMINANCE4_ALPHA4: str = "GL_LUMINANCE4_ALPHA4" ; break ;
1610 case GL_LUMINANCE6_ALPHA2: str = "GL_LUMINANCE6_ALPHA2" ; break ;
1611 case GL_LUMINANCE8_ALPHA8: str = "GL_LUMINANCE8_ALPHA8" ; break ;
1612 case GL_LUMINANCE12_ALPHA4: str = "GL_LUMINANCE12_ALPHA4" ; break ;
1613 case GL_LUMINANCE12_ALPHA12: str = "GL_LUMINANCE12_ALPHA12" ; break ;
1614 case GL_LUMINANCE16_ALPHA16: str = "GL_LUMINANCE16_ALPHA16" ; break ;
1615
1616 case GL_INTENSITY: str = "GL_INTENSITY" ; break ;
1617 case GL_INTENSITY4: str = "GL_INTENSITY4" ; break ;
1618 case GL_INTENSITY8: str = "GL_INTENSITY8" ; break ;
1619 case GL_INTENSITY12: str = "GL_INTENSITY12" ; break ;
1620 case GL_INTENSITY16: str = "GL_INTENSITY16" ; break ;
1621
1622 case GL_RGB: str = "GL_RGB" ; break ;
1623 case GL_R3_G3_B2: str = "GL_R3_G3_B2" ; break ;
1624 case GL_RGB4: str = "GL_RGB4" ; break ;
1625 case GL_RGB5: str = "GL_RGB5" ; break ;
1626 case GL_RGB8: str = "GL_RGB8" ; break ;
1627 case GL_RGB10: str = "GL_RGB10" ; break ;
1628 case GL_RGB12: str = "GL_RGB12" ; break ;
1629 case GL_RGB16: str = "GL_RGB16" ; break ;
1630
1631 case GL_RGBA: str = "GL_RGBA" ; break ;
1632 case GL_RGBA2: str = "GL_RGBA2" ; break ;
1633 case GL_RGBA4: str = "GL_RGBA4" ; break ;
1634 case GL_RGB5_A1: str = "GL_RGB5_A1" ; break ;
1635 case GL_RGBA8: str = "GL_RGBA8" ; break ;
1636 case GL_RGB10_A2: str = "GL_RGB10_A2" ; break ;
1637 case GL_RGBA12: str = "GL_RGBA12" ; break ;
1638 case GL_RGBA16: str = "GL_RGBA16" ; break ;
1639
1640 // compressed format
1641 case GL_COMPRESSED_ALPHA: str = "GL_COMPRESSED_ALPHA" ; break ;
1642 case GL_COMPRESSED_LUMINANCE: str = "GL_COMPRESSED_LUMINANCE" ; break ;
1643 case GL_COMPRESSED_LUMINANCE_ALPHA: str = "GL_COMPRESSED_LUMINANCE_ALPHA" ; break ;
1644 case GL_COMPRESSED_INTENSITY: str = "GL_COMPRESSED_INTENSITY" ; break ;
1645 case GL_COMPRESSED_RGB: str = "GL_COMPRESSED_RGB" ; break ;
1646 case GL_COMPRESSED_RGBA: str = "GL_COMPRESSED_RGBA" ; break ;
1647
1648 // s3tc format
1649 case GL_COMPRESSED_RGB_S3TC_DXT1: str = "GL_COMPRESSED_RGB_S3TC_DXT1" ; break ;
1650 case GL_COMPRESSED_RGBA_S3TC_DXT1: str = "GL_COMPRESSED_RGBA_S3TC_DXT1" ; break ;
1651 case GL_COMPRESSED_RGBA_S3TC_DXT3: str = "GL_COMPRESSED_RGBA_S3TC_DXT3" ; break ;
1652 case GL_COMPRESSED_RGBA_S3TC_DXT5: str = "GL_COMPRESSED_RGBA_S3TC_DXT5" ; break ;
1653
1654 // FXT1 format
1655 case GL_COMPRESSED_RGB_FXT1: str = "GL_COMPRESSED_RGB_FXT1" ; break ;
1656 case GL_COMPRESSED_RGBA_FXT1: str = "GL_COMPRESSED_RGBA_FXT1" ; break ;
1657
1658 default:
1659 str = "Unknown format" ; break ;
1660 }
1661
1662 return str ;
1663 }
1664
1665
1666 // Win32
1667 // opengl32.dll �����
1668 // ���ߤΤȤ���Win32 �� Mesa DLL ����Ѥ�������
1669 #ifdef WIN32
1670 OpenGLDLLCtrl OpenGLDLLCtrl::openGLDLLCtrl ;
1671 #endif // #ifdef WIN32
1672