www.pudn.com > tomohide_fur.03.13.02.zip > extensions.h
//-----------------------------------------------------------------------------
// File: extensions.h
//
// Copyright (C) 2001-2002 Tomohide Kano. All rights reserved.
//-----------------------------------------------------------------------------
#pragma once
#include "glATI.h"
#if defined(DECLARE_EXTENSION_SUBSTANCE)
#define EXTERN
#else
#define EXTERN extern
#endif
// GL_ARB_multitexture
EXTERN PFNGLACTIVETEXTUREARBPROC glActiveTextureARB;
EXTERN PFNGLCLIENTACTIVETEXTUREARBPROC glClientActiveTextureARB;
// GL_EXT_texture3D
EXTERN PFNGLTEXIMAGE3DEXTPROC glTexImage3DEXT;
// ATI_vertex_array_object
EXTERN PFNGLNEWOBJECTBUFFERATIPROC glNewObjectBufferATI;
EXTERN PFNGLISOBJECTBUFFERATIPROC glIsObjectBufferATI;
EXTERN PFNGLUPDATEOBJECTBUFFERATIPROC glUpdateObjectBufferATI;
EXTERN PFNGLGETOBJECTBUFFERFVATIPROC glGetObjectBufferfvATI;
EXTERN PFNGLGETOBJECTBUFFERIVATIPROC glGetObjectBufferivATI;
EXTERN PFNGLFREEOBJECTBUFFERATIPROC glFreeObjectBufferATI;
EXTERN PFNGLARRAYOBJECTATIPROC glArrayObjectATI;
EXTERN PFNGLGETARRAYOBJECTFVATIPROC glGetArrayObjectfvATI;
EXTERN PFNGLGETARRAYOBJECTIVATIPROC glGetArrayObjectivATI;
EXTERN PFNGLVARIANTARRAYOBJECTATIPROC glVariantArrayObjectATI;
EXTERN PFNGLGETVARIANTARRAYOBJECTFVATIPROC glGetVariantArrayObjectfvATI;
EXTERN PFNGLGETVARIANTARRAYOBJECTIVATIPROC glGetVariantArrayObjectivATI;
// ATI_element_arrays
EXTERN PFNGLELEMENTPOINTERATIPROC glElementPointerATI;
EXTERN PFNGLDRAWELEMENTARRAYATIPROC glDrawElementArrayATI;
EXTERN PFNGLDRAWRANGEELEMENTARRAYATIPROC glDrawRangeElementArrayATI;
// GL_EXT_vertex_shader
EXTERN PFNGLBEGINVERTEXSHADEREXTPROC glBeginVertexShaderEXT;
EXTERN PFNGLENDVERTEXSHADEREXTPROC glEndVertexShaderEXT;
EXTERN PFNGLBINDVERTEXSHADEREXTPROC glBindVertexShaderEXT;
EXTERN PFNGLGENVERTEXSHADERSEXTPROC glGenVertexShadersEXT;
EXTERN PFNGLDELETEVERTEXSHADEREXTPROC glDeleteVertexShaderEXT;
EXTERN PFNGLSHADEROP1EXTPROC glShaderOp1EXT;
EXTERN PFNGLSHADEROP2EXTPROC glShaderOp2EXT;
EXTERN PFNGLSHADEROP3EXTPROC glShaderOp3EXT;
EXTERN PFNGLSWIZZLEEXTPROC glSwizzleEXT;
EXTERN PFNGLWRITEMASKEXTPROC glWriteMaskEXT;
EXTERN PFNGLINSERTCOMPONENTEXTPROC glInsertComponentEXT;
EXTERN PFNGLEXTRACTCOMPONENTEXTPROC glExtractComponentEXT;
EXTERN PFNGLGENSYMBOLSEXTPROC glGenSymbolsEXT;
EXTERN PFNGLSETINVARIANTEXTPROC glSetInvariantEXT;
EXTERN PFNGLSETLOCALCONSTANTEXTPROC glSetLocalConstantEXT;
EXTERN PFNGLVARIANTBVEXTPROC glVariantbvEXT;
EXTERN PFNGLVARIANTSVEXTPROC glVariantsvEXT;
EXTERN PFNGLVARIANTIVEXTPROC glVariantivEXT;
EXTERN PFNGLVARIANTFVEXTPROC glVariantfvEXT;
EXTERN PFNGLVARIANTDVEXTPROC glVariantdvEXT;
EXTERN PFNGLVARIANTUBVEXTPROC glVariantubvEXT;
EXTERN PFNGLVARIANTUSVEXTPROC glVariantusvEXT;
EXTERN PFNGLVARIANTUIVEXTPROC glVariantuivEXT;
EXTERN PFNGLVARIANTPOINTEREXTPROC glVariantPointerEXT;
EXTERN PFNGLENABLEVARIANTCLIENTSTATEEXTPROC glEnableVariantClientStateEXT;
EXTERN PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC glDisableVariantClientStateEXT;
EXTERN PFNGLBINDLIGHTPARAMETEREXTPROC glBindLightParameterEXT;
EXTERN PFNGLBINDMATERIALPARAMETEREXTPROC glBindMaterialParameterEXT;
EXTERN PFNGLBINDTEXGENPARAMETEREXTPROC glBindTexGenParameterEXT;
EXTERN PFNGLBINDTEXTUREUNITPARAMETEREXTPROC glBindTextureUnitParameterEXT;
EXTERN PFNGLBINDPARAMETEREXTPROC glBindParameterEXT;
EXTERN PFNGLISVARIANTENABLEDEXTPROC glIsVariantEnabledEXT;
EXTERN PFNGLGETVARIANTBOOLEANVEXTPROC glGetVariantBooleanvEXT;
EXTERN PFNGLGETVARIANTINTEGERVEXTPROC glGetVariantIntegervEXT;
EXTERN PFNGLGETVARIANTFLOATVEXTPROC glGetVariantFloatvEXT;
EXTERN PFNGLGETVARIANTPOINTERVEXTPROC glGetVariantPointervEXT;
EXTERN PFNGLGETINVARIANTBOOLEANVEXTPROC glGetInvariantBooleanvEXT;
EXTERN PFNGLGETINVARIANTINTEGERVEXTPROC glGetInvariantIntegervEXT;
EXTERN PFNGLGETINVARIANTFLOATVEXTPROC glGetInvariantFloatvEXT;
EXTERN PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC glGetLocalConstantBooleanvEXT;
EXTERN PFNGLGETLOCALCONSTANTINTEGERVEXTPROC glGetLocalConstantIntegervEXT;
EXTERN PFNGLGETLOCALCONSTANTFLOATVEXTPROC glGetLocalConstantFloatvEXT;
// GL_ATI_fragment_shader
EXTERN PFNGLGENFRAGMENTSHADERSATIPROC glGenFragmentShadersATI;
EXTERN PFNGLBINDFRAGMENTSHADERATIPROC glBindFragmentShaderATI;
EXTERN PFNGLDELETEFRAGMENTSHADERATIPROC glDeleteFragmentShaderATI;
EXTERN PFNGLBEGINFRAGMENTSHADERATIPROC glBeginFragmentShaderATI;
EXTERN PFNGLENDFRAGMENTSHADERATIPROC glEndFragmentShaderATI;
EXTERN PFNGLPASSTEXCOORDATIPROC glPassTexCoordATI;
EXTERN PFNGLSAMPLEMAPATIPROC glSampleMapATI;
EXTERN PFNGLCOLORFRAGMENTOP1ATIPROC glColorFragmentOp1ATI;
EXTERN PFNGLCOLORFRAGMENTOP2ATIPROC glColorFragmentOp2ATI;
EXTERN PFNGLCOLORFRAGMENTOP3ATIPROC glColorFragmentOp3ATI;
EXTERN PFNGLALPHAFRAGMENTOP1ATIPROC glAlphaFragmentOp1ATI;
EXTERN PFNGLALPHAFRAGMENTOP2ATIPROC glAlphaFragmentOp2ATI;
EXTERN PFNGLALPHAFRAGMENTOP3ATIPROC glAlphaFragmentOp3ATI;
EXTERN PFNGLSETFRAGMENTSHADERCONSTANTATIPROC glSetFragmentShaderConstantATI;
#undef EXTERN
#if defined(DECLARE_EXTENSION_SUBSTANCE)
bool CheckExtension(const char *ext)
{
const char *p = (const char *)glGetString(GL_EXTENSIONS);
const char *end;
if (p == NULL) return false;
end = p + strlen(p);
while (p < end)
{
GLuint n = strcspn(p, " ");
if (strlen(ext) == n && strncmp(ext, p, n) == 0)
return true;
p += n + 1;
}
return false;
}
bool InitExtensions(void)
{
if (!CheckExtension("GL_ARB_multitexture")) return false;
if (!CheckExtension("GL_ATI_element_array")) return false;
if (!CheckExtension("GL_ATI_fragment_shader")) return false;
if (!CheckExtension("GL_ATI_texture_mirror_once")) return false;
if (!CheckExtension("GL_ATI_vertex_array_object")) return false;
if (!CheckExtension("GL_EXT_vertex_shader")) return false;
if (!CheckExtension("GL_EXT_texture3D")) return false;
// GL_ARB_multitexture
glActiveTextureARB = (PFNGLACTIVETEXTUREARBPROC)wglGetProcAddress("glActiveTextureARB");
glClientActiveTextureARB = (PFNGLCLIENTACTIVETEXTUREARBPROC)wglGetProcAddress("glClientActiveTextureARB");
if (!glActiveTextureARB) return false;
if (!glClientActiveTextureARB) return false;
// GL_EXT_texture3D
glTexImage3DEXT = (PFNGLTEXIMAGE3DEXTPROC)wglGetProcAddress("glTexImage3DEXT");
if (!glTexImage3DEXT) return false;
// GL_ATI_vertex_array_object
glNewObjectBufferATI = (PFNGLNEWOBJECTBUFFERATIPROC)wglGetProcAddress("glNewObjectBufferATI");
glIsObjectBufferATI = (PFNGLISOBJECTBUFFERATIPROC)wglGetProcAddress("glIsObjectBufferATI");
glUpdateObjectBufferATI = (PFNGLUPDATEOBJECTBUFFERATIPROC)wglGetProcAddress("glUpdateObjectBufferATI");
glGetObjectBufferfvATI = (PFNGLGETOBJECTBUFFERFVATIPROC)wglGetProcAddress("glGetObjectBufferfvATI");
glGetObjectBufferivATI = (PFNGLGETOBJECTBUFFERIVATIPROC)wglGetProcAddress("glGetObjectBufferivATI");
glFreeObjectBufferATI = (PFNGLFREEOBJECTBUFFERATIPROC)wglGetProcAddress("glFreeObjectBufferATI");
glArrayObjectATI = (PFNGLARRAYOBJECTATIPROC)wglGetProcAddress("glArrayObjectATI");
glGetArrayObjectfvATI = (PFNGLGETARRAYOBJECTFVATIPROC)wglGetProcAddress("glGetArrayObjectfvATI");
glGetArrayObjectivATI = (PFNGLGETARRAYOBJECTIVATIPROC)wglGetProcAddress("glGetArrayObjectivATI");
glVariantArrayObjectATI = (PFNGLVARIANTARRAYOBJECTATIPROC)wglGetProcAddress("glVariantArrayObjectATI");
glGetVariantArrayObjectfvATI = (PFNGLGETVARIANTARRAYOBJECTFVATIPROC)wglGetProcAddress("glGetVariantArrayObjectfvATI");
glGetVariantArrayObjectivATI = (PFNGLGETVARIANTARRAYOBJECTIVATIPROC)wglGetProcAddress("glGetVariantArrayObjectivATI");
if (!glNewObjectBufferATI) return false;
if (!glIsObjectBufferATI) return false;
if (!glUpdateObjectBufferATI) return false;
if (!glGetObjectBufferfvATI) return false;
if (!glGetObjectBufferivATI) return false;
if (!glFreeObjectBufferATI) return false;
if (!glArrayObjectATI) return false;
if (!glGetArrayObjectfvATI) return false;
if (!glGetArrayObjectivATI) return false;
if (!glVariantArrayObjectATI) return false;
if (!glGetVariantArrayObjectfvATI) return false;
if (!glGetVariantArrayObjectivATI) return false;
// GL_ATI_element_array
glElementPointerATI = (PFNGLELEMENTPOINTERATIPROC)wglGetProcAddress("glElementPointerATI");
glDrawElementArrayATI = (PFNGLDRAWELEMENTARRAYATIPROC)wglGetProcAddress("glDrawElementArrayATI");
glDrawRangeElementArrayATI = (PFNGLDRAWRANGEELEMENTARRAYATIPROC)wglGetProcAddress("glDrawRangeElementArrayATI");
if (!glElementPointerATI) return false;
if (!glDrawElementArrayATI) return false;
if (!glDrawRangeElementArrayATI) return false;
// GL_EXT_vertex_shader
glBeginVertexShaderEXT = (PFNGLBEGINVERTEXSHADEREXTPROC)wglGetProcAddress("glBeginVertexShaderEXT");
glEndVertexShaderEXT = (PFNGLENDVERTEXSHADEREXTPROC)wglGetProcAddress("glEndVertexShaderEXT");
glBindVertexShaderEXT = (PFNGLBINDVERTEXSHADEREXTPROC)wglGetProcAddress("glBindVertexShaderEXT");
glGenVertexShadersEXT = (PFNGLGENVERTEXSHADERSEXTPROC)wglGetProcAddress("glGenVertexShadersEXT");
glDeleteVertexShaderEXT = (PFNGLDELETEVERTEXSHADEREXTPROC)wglGetProcAddress("glDeleteVertexShaderEXT");
glShaderOp1EXT = (PFNGLSHADEROP1EXTPROC)wglGetProcAddress("glShaderOp1EXT");
glShaderOp2EXT = (PFNGLSHADEROP2EXTPROC)wglGetProcAddress("glShaderOp2EXT");
glShaderOp3EXT = (PFNGLSHADEROP3EXTPROC)wglGetProcAddress("glShaderOp3EXT");
glSwizzleEXT = (PFNGLSWIZZLEEXTPROC)wglGetProcAddress("glSwizzleEXT");
glWriteMaskEXT = (PFNGLWRITEMASKEXTPROC)wglGetProcAddress("glWriteMaskEXT");
glInsertComponentEXT = (PFNGLINSERTCOMPONENTEXTPROC)wglGetProcAddress("glInsertComponentEXT");
glExtractComponentEXT = (PFNGLEXTRACTCOMPONENTEXTPROC)wglGetProcAddress("glExtractComponentEXT");
glGenSymbolsEXT = (PFNGLGENSYMBOLSEXTPROC)wglGetProcAddress("glGenSymbolsEXT");
glSetInvariantEXT = (PFNGLSETINVARIANTEXTPROC)wglGetProcAddress("glSetInvariantEXT");
glSetLocalConstantEXT = (PFNGLSETLOCALCONSTANTEXTPROC)wglGetProcAddress("glSetLocalConstantEXT");
glVariantbvEXT = (PFNGLVARIANTBVEXTPROC)wglGetProcAddress("glVariantbvEXT");
glVariantsvEXT = (PFNGLVARIANTSVEXTPROC)wglGetProcAddress("glVariantsvEXT");
glVariantivEXT = (PFNGLVARIANTIVEXTPROC)wglGetProcAddress("glVariantivEXT");
glVariantfvEXT = (PFNGLVARIANTFVEXTPROC)wglGetProcAddress("glVariantfvEXT");
glVariantdvEXT = (PFNGLVARIANTDVEXTPROC)wglGetProcAddress("glVariantdvEXT");
glVariantubvEXT = (PFNGLVARIANTUBVEXTPROC)wglGetProcAddress("glVariantubvEXT");
glVariantusvEXT = (PFNGLVARIANTUSVEXTPROC)wglGetProcAddress("glVariantusvEXT");
glVariantuivEXT = (PFNGLVARIANTUIVEXTPROC)wglGetProcAddress("glVariantuivEXT");
glVariantPointerEXT = (PFNGLVARIANTPOINTEREXTPROC)wglGetProcAddress("glVariantPointerEXT");
glEnableVariantClientStateEXT = (PFNGLENABLEVARIANTCLIENTSTATEEXTPROC)wglGetProcAddress("glEnableVariantClientStateEXT");
glDisableVariantClientStateEXT = (PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC)wglGetProcAddress("glDisableVariantClientStateEXT");
glBindLightParameterEXT = (PFNGLBINDLIGHTPARAMETEREXTPROC)wglGetProcAddress("glBindLightParameterEXT");
glBindMaterialParameterEXT = (PFNGLBINDMATERIALPARAMETEREXTPROC)wglGetProcAddress("glBindMaterialParameterEXT");
glBindTexGenParameterEXT = (PFNGLBINDTEXGENPARAMETEREXTPROC)wglGetProcAddress("glBindTexGenParameterEXT");
glBindTextureUnitParameterEXT = (PFNGLBINDTEXTUREUNITPARAMETEREXTPROC)wglGetProcAddress("glBindTextureUnitParameterEXT");
glBindParameterEXT = (PFNGLBINDPARAMETEREXTPROC)wglGetProcAddress("glBindParameterEXT");
glIsVariantEnabledEXT = (PFNGLISVARIANTENABLEDEXTPROC)wglGetProcAddress("glIsVariantEnabledEXT");
glGetVariantBooleanvEXT = (PFNGLGETVARIANTBOOLEANVEXTPROC)wglGetProcAddress("glGetVariantBooleanvEXT");
glGetVariantIntegervEXT = (PFNGLGETVARIANTINTEGERVEXTPROC)wglGetProcAddress("glGetVariantIntegervEXT");
glGetVariantFloatvEXT = (PFNGLGETVARIANTFLOATVEXTPROC)wglGetProcAddress("glGetVariantFloatvEXT");
glGetVariantPointervEXT = (PFNGLGETVARIANTPOINTERVEXTPROC)wglGetProcAddress("glGetVariantPointervEXT");
glGetInvariantBooleanvEXT = (PFNGLGETINVARIANTBOOLEANVEXTPROC)wglGetProcAddress("glGetInvariantBooleanvEXT");
glGetInvariantIntegervEXT = (PFNGLGETINVARIANTINTEGERVEXTPROC)wglGetProcAddress("glGetInvariantIntegervEXT");
glGetInvariantFloatvEXT = (PFNGLGETINVARIANTFLOATVEXTPROC)wglGetProcAddress("glGetInvariantFloatvEXT");
glGetLocalConstantBooleanvEXT = (PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC)wglGetProcAddress("glGetLocalConstantBooleanvEXT");
glGetLocalConstantIntegervEXT = (PFNGLGETLOCALCONSTANTINTEGERVEXTPROC)wglGetProcAddress("glGetLocalConstantIntegervEXT");
glGetLocalConstantFloatvEXT = (PFNGLGETLOCALCONSTANTFLOATVEXTPROC)wglGetProcAddress("glGetLocalConstantFloatvEXT");
if (!glBeginVertexShaderEXT) return false;
if (!glEndVertexShaderEXT) return false;
if (!glBindVertexShaderEXT) return false;
if (!glGenVertexShadersEXT) return false;
if (!glDeleteVertexShaderEXT) return false;
if (!glShaderOp1EXT) return false;
if (!glShaderOp2EXT) return false;
if (!glShaderOp3EXT) return false;
if (!glSwizzleEXT) return false;
if (!glWriteMaskEXT) return false;
if (!glInsertComponentEXT) return false;
if (!glExtractComponentEXT) return false;
if (!glGenSymbolsEXT) return false;
if (!glSetInvariantEXT) return false;
if (!glSetLocalConstantEXT) return false;
if (!glVariantbvEXT) return false;
if (!glVariantsvEXT) return false;
if (!glVariantivEXT) return false;
if (!glVariantfvEXT) return false;
if (!glVariantdvEXT) return false;
if (!glVariantubvEXT) return false;
if (!glVariantusvEXT) return false;
if (!glVariantuivEXT) return false;
if (!glVariantPointerEXT) return false;
if (!glEnableVariantClientStateEXT) return false;
if (!glDisableVariantClientStateEXT) return false;
if (!glBindLightParameterEXT) return false;
if (!glBindMaterialParameterEXT) return false;
if (!glBindTexGenParameterEXT) return false;
if (!glBindTextureUnitParameterEXT) return false;
if (!glBindParameterEXT) return false;
if (!glIsVariantEnabledEXT) return false;
if (!glGetVariantBooleanvEXT) return false;
if (!glGetVariantIntegervEXT) return false;
if (!glGetVariantFloatvEXT) return false;
if (!glGetVariantPointervEXT) return false;
if (!glGetInvariantBooleanvEXT) return false;
if (!glGetInvariantIntegervEXT) return false;
if (!glGetInvariantFloatvEXT) return false;
if (!glGetLocalConstantBooleanvEXT) return false;
if (!glGetLocalConstantIntegervEXT) return false;
if (!glGetLocalConstantFloatvEXT) return false;
// GL_ATI_fragment_shader
glGenFragmentShadersATI = (PFNGLGENFRAGMENTSHADERSATIPROC)wglGetProcAddress("glGenFragmentShadersATI");
glBindFragmentShaderATI = (PFNGLBINDFRAGMENTSHADERATIPROC)wglGetProcAddress("glBindFragmentShaderATI");
glDeleteFragmentShaderATI = (PFNGLDELETEFRAGMENTSHADERATIPROC)wglGetProcAddress("glDeleteFragmentShaderATI");
glBeginFragmentShaderATI = (PFNGLBEGINFRAGMENTSHADERATIPROC)wglGetProcAddress("glBeginFragmentShaderATI");
glEndFragmentShaderATI = (PFNGLENDFRAGMENTSHADERATIPROC)wglGetProcAddress("glEndFragmentShaderATI");
glPassTexCoordATI = (PFNGLPASSTEXCOORDATIPROC)wglGetProcAddress("glPassTexCoordATI");
glSampleMapATI = (PFNGLSAMPLEMAPATIPROC)wglGetProcAddress("glSampleMapATI");
glColorFragmentOp1ATI = (PFNGLCOLORFRAGMENTOP1ATIPROC)wglGetProcAddress("glColorFragmentOp1ATI");
glColorFragmentOp2ATI = (PFNGLCOLORFRAGMENTOP2ATIPROC)wglGetProcAddress("glColorFragmentOp2ATI");
glColorFragmentOp3ATI = (PFNGLCOLORFRAGMENTOP3ATIPROC)wglGetProcAddress("glColorFragmentOp3ATI");
glAlphaFragmentOp1ATI = (PFNGLALPHAFRAGMENTOP1ATIPROC)wglGetProcAddress("glAlphaFragmentOp1ATI");
glAlphaFragmentOp2ATI = (PFNGLALPHAFRAGMENTOP2ATIPROC)wglGetProcAddress("glAlphaFragmentOp2ATI");
glAlphaFragmentOp3ATI = (PFNGLALPHAFRAGMENTOP3ATIPROC)wglGetProcAddress("glAlphaFragmentOp3ATI");
glSetFragmentShaderConstantATI = (PFNGLSETFRAGMENTSHADERCONSTANTATIPROC)wglGetProcAddress("glSetFragmentShaderConstantATI");
if (!glGenFragmentShadersATI) return false;
if (!glBindFragmentShaderATI) return false;
if (!glDeleteFragmentShaderATI) return false;
if (!glBeginFragmentShaderATI) return false;
if (!glEndFragmentShaderATI) return false;
if (!glPassTexCoordATI) return false;
if (!glSampleMapATI) return false;
if (!glColorFragmentOp1ATI) return false;
if (!glColorFragmentOp2ATI) return false;
if (!glColorFragmentOp3ATI) return false;
if (!glAlphaFragmentOp1ATI) return false;
if (!glAlphaFragmentOp2ATI) return false;
if (!glAlphaFragmentOp3ATI) return false;
if (!glSetFragmentShaderConstantATI) return false;
return true;
}
#else
extern bool CheckExtension(const char *ext);
extern bool InitExtensions(void);
#endif