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, &current_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