?? extgl.cpp
字號:
#include "init.h"
/* getProcAddress */
static void *extgl_GetProcAddress(char *name)
{
void *t = wglGetProcAddress(name);
if (t == NULL)ext.z_error = 1;
return t;
}
#ifdef GL_ARB_multitexture
PFNGLACTIVETEXTUREARBPROC glActiveTextureARB = NULL;
PFNGLCLIENTACTIVETEXTUREARBPROC glClientActiveTextureARB = NULL;
PFNGLMULTITEXCOORD1FARBPROC glMultiTexCoord1fARB = NULL;
PFNGLMULTITEXCOORD1FVARBPROC glMultiTexCoord1fvARB = NULL;
PFNGLMULTITEXCOORD2FARBPROC glMultiTexCoord2fARB = NULL;
PFNGLMULTITEXCOORD2FVARBPROC glMultiTexCoord2fvARB = NULL;
PFNGLMULTITEXCOORD3FARBPROC glMultiTexCoord3fARB = NULL;
PFNGLMULTITEXCOORD3FVARBPROC glMultiTexCoord3fvARB = NULL;
//PFNGLMULTITEXCOORD4FARBPROC glMultiTexCoord4fARB = NULL;
//PFNGLMULTITEXCOORD4FVARBPROC glMultiTexCoord4fvARB = NULL;
#endif
static inline init_ARB_multitexture()
{
glActiveTextureARB = (PFNGLACTIVETEXTUREARBPROC) extgl_GetProcAddress("glActiveTextureARB");
glClientActiveTextureARB = (PFNGLCLIENTACTIVETEXTUREARBPROC) extgl_GetProcAddress("glClientActiveTextureARB");
glMultiTexCoord1fARB = (PFNGLMULTITEXCOORD1FARBPROC) extgl_GetProcAddress("glMultiTexCoord1fARB");
glMultiTexCoord1fvARB = (PFNGLMULTITEXCOORD1FVARBPROC) extgl_GetProcAddress("glMultiTexCoord1fvARB");
glMultiTexCoord2fARB = (PFNGLMULTITEXCOORD2FARBPROC) extgl_GetProcAddress("glMultiTexCoord2fARB");
glMultiTexCoord2fvARB = (PFNGLMULTITEXCOORD2FVARBPROC) extgl_GetProcAddress("glMultiTexCoord2fvARB");
glMultiTexCoord3fARB = (PFNGLMULTITEXCOORD3FARBPROC) extgl_GetProcAddress("glMultiTexCoord3fARB");
glMultiTexCoord3fvARB = (PFNGLMULTITEXCOORD3FVARBPROC) extgl_GetProcAddress("glMultiTexCoord3fvARB");
// glMultiTexCoord4fARB = (PFNGLMULTITEXCOORD4FARBPROC) extgl_GetProcAddress("glMultiTexCoord4fARB");
// glMultiTexCoord4fvARB = (PFNGLMULTITEXCOORD4FVARBPROC) extgl_GetProcAddress("glMultiTexCoord4fvARB");
}
#ifdef GL_ATI_envmap_bumpmap
//PFNGLTEXBUMPPARAMETERIVATIPROC glTexBumpParameterivATI = NULL;
PFNGLTEXBUMPPARAMETERFVATIPROC glTexBumpParameterfvATI = NULL;
PFNGLGETTEXBUMPPARAMETERIVATIPROC glGetTexBumpParameterivATI = NULL;
//PFNGLGETTEXBUMPPARAMETERFVATIPROC glGetTexBumpParameterfvATI = NULL;
#endif
static inline init_ATI_envmap_bumpmap()
{
// glTexBumpParameterivATI = (PFNGLTEXBUMPPARAMETERIVATIPROC) extgl_GetProcAddress("glTexBumpParameterivATI");
glTexBumpParameterfvATI = (PFNGLTEXBUMPPARAMETERFVATIPROC) extgl_GetProcAddress("glTexBumpParameterfvATI");
glGetTexBumpParameterivATI = (PFNGLGETTEXBUMPPARAMETERIVATIPROC) extgl_GetProcAddress("glGetTexBumpParameterivATI");
// glGetTexBumpParameterfvATI = (PFNGLGETTEXBUMPPARAMETERFVATIPROC) extgl_GetProcAddress("glGetTexBumpParameterfvATI");
}
extension ext;
bool isInString(char *string, const char *search)
{
int pos=0;
int maxpos=strlen(search)-1;
int len=strlen(string);
char *other;
for (int i=0; i<len; i++)
{
if ((i==0) || ((i>1) && string[i-1]=='\n'))
{ // New Extension Begins Here!
other=&string[i];
pos=0; // Begin New Search
while (string[i]!='\n')
{ // Search Whole Extension-String
if (string[i]==search[pos]) pos++; // Next Position
if ((pos>maxpos) && string[i+1]=='\n') return true; // We Have A Winner!
i++;
}
}
}
return false; // Sorry, Not Found!
}
#define GET_INTEGER( extension, maximum, variable, value) \
if(ext.extension) \
glGetIntegerv( maximum, &ext.max.variable); \
else \
ext.max.variable=value;
int extInit()
{
char *extensions;
extensions=strdup((char *) glGetString(GL_EXTENSIONS)); // Fetch Extension String
int len=strlen(extensions);
for (int i=0; i<len; i++) // Separate It By Newline Instead Of Blank
if (extensions[i]==' ') extensions[i]='\n';
if(isInString(extensions,"GL_ARB_multitexture"))ext.ARB_multitexture=1;
if(isInString(extensions,"GL_ARB_texture_compression"))ext.ARB_texture_compression=1;
if(isInString(extensions,"GL_ARB_texture_cube_map"))ext.ARB_texture_cube_map=1;
if(isInString(extensions,"GL_ARB_texture_env_add"))ext.ARB_texture_env_add=1;
if(isInString(extensions,"GL_ARB_texture_env_combine"))ext.ARB_texture_env_combine=1;
if(isInString(extensions,"GL_ARB_texture_env_dot3"))ext.ARB_texture_env_dot3=1;
if(isInString(extensions,"GL_ATI_envmap_bumpmap"))ext.ATI_envmap_bumpmap=1;
if(isInString(extensions,"GL_EXT_bgra"))ext.EXT_bgra=1;
if(isInString(extensions,"GL_EXT_texture_cube_map"))ext.ARB_texture_cube_map=1;
if(isInString(extensions,"GL_EXT_texture_edge_clamp"))ext.EXT_texture_edge_clamp=1;
if(isInString(extensions,"GL_EXT_texture_filter_anisotropic"))ext.EXT_texture_filter_anisotropic=1;
if(isInString(extensions,"GL_SGIS_texture_edge_clamp"))ext.EXT_texture_edge_clamp=1;
if(isInString(extensions,"GL_SGIS_generate_mipmap"))ext.SGIS_generate_mipmap=1;
glGetIntegerv( GL_MAX_TEXTURE_SIZE, &ext.max.max_texture_size);
GET_INTEGER( ARB_multitexture, GL_MAX_TEXTURE_UNITS_ARB, max_texture_units, 1);
GET_INTEGER( ARB_texture_cube_map, GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB, max_cube_map_texture_size, 1);
GET_INTEGER( EXT_texture_filter_anisotropic, GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, max_texture_max_anisotropy, 1);
ext.z_error=0;
if(ext.ARB_multitexture)init_ARB_multitexture();
if(ext.ATI_envmap_bumpmap)init_ATI_envmap_bumpmap();
free(extensions);
if(ext.z_error)return 0;
if(ext.ATI_envmap_bumpmap)
{
glGetTexBumpParameterivATI( GL_BUMP_NUM_TEX_UNITS_ATI, &ext.max.max_ATI_envmap_bumpmap.bump_num_tex_units_ati);
glGetTexBumpParameterivATI( GL_BUMP_ROT_MATRIX_SIZE_ATI, &ext.max.max_ATI_envmap_bumpmap.bump_rot_matrix_size_ati);
glGetTexBumpParameterivATI( GL_BUMP_TEX_UNITS_ATI, ext.max.max_ATI_envmap_bumpmap.bump_tex_units_ati);
}
return 1;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -