?? 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
#ifdef GL_ARB_vertex_program
glVertexAttrib3fARBPROC glVertexAttrib3fARB = NULL;
glVertexAttrib4fARBPROC glVertexAttrib4fARB = NULL;
glVertexAttrib3fvARBPROC glVertexAttrib3fvARB = NULL;
glVertexAttrib4fvARBPROC glVertexAttrib4fvARB = NULL;
glProgramStringARBPROC glProgramStringARB = NULL;
glBindProgramARBPROC glBindProgramARB = NULL;
glDeleteProgramsARBPROC glDeleteProgramsARB = NULL;
glGenProgramsARBPROC glGenProgramsARB = NULL;
glProgramEnvParameter4fARBPROC glProgramEnvParameter4fARB = NULL;
glProgramEnvParameter4fvARBPROC glProgramEnvParameter4fvARB = NULL;
glProgramLocalParameter4fARBPROC glProgramLocalParameter4fARB = NULL;
glProgramLocalParameter4fvARBPROC glProgramLocalParameter4fvARB = NULL;
glGetProgramivARBPROC glGetProgramivARB = NULL;
glGetProgramStringARBPROC glGetProgramStringARB = NULL;
#endif /* GL_ARB_vertex_program */
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");
}
static inline void Init_ARB_vertex_program()
{
#ifdef GL_ARB_vertex_program
glVertexAttrib3fARB = (glVertexAttrib3fARBPROC) extgl_GetProcAddress("glVertexAttrib3fARB");
glVertexAttrib4fARB = (glVertexAttrib4fARBPROC) extgl_GetProcAddress("glVertexAttrib4fARB");
glVertexAttrib3fvARB = (glVertexAttrib3fvARBPROC) extgl_GetProcAddress("glVertexAttrib3fvARB");
glVertexAttrib4fvARB = (glVertexAttrib4fvARBPROC) extgl_GetProcAddress("glVertexAttrib4fvARB");
glProgramStringARB = (glProgramStringARBPROC) extgl_GetProcAddress("glProgramStringARB");
glBindProgramARB = (glBindProgramARBPROC) extgl_GetProcAddress("glBindProgramARB");
glDeleteProgramsARB = (glDeleteProgramsARBPROC) extgl_GetProcAddress("glDeleteProgramsARB");
glGenProgramsARB = (glGenProgramsARBPROC) extgl_GetProcAddress("glGenProgramsARB");
glProgramEnvParameter4fARB = (glProgramEnvParameter4fARBPROC) extgl_GetProcAddress("glProgramEnvParameter4fARB");
glProgramEnvParameter4fvARB = (glProgramEnvParameter4fvARBPROC) extgl_GetProcAddress("glProgramEnvParameter4fvARB");
glProgramLocalParameter4fARB = (glProgramLocalParameter4fARBPROC) extgl_GetProcAddress("glProgramLocalParameter4fARB");
glProgramLocalParameter4fvARB = (glProgramLocalParameter4fvARBPROC) extgl_GetProcAddress("glProgramLocalParameter4fvARB");
glGetProgramivARB = (glGetProgramivARBPROC) extgl_GetProcAddress("glGetProgramivARB");
glGetProgramStringARB = (glGetProgramStringARBPROC) extgl_GetProcAddress("glGetProgramStringARB");
#endif
}
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_ARB_vertex_program"))ext.ARB_vertex_program=1;
if(isInString(extensions,"GL_EXT_bgra"))ext.EXT_bgra=1;
if(isInString(extensions,"GL_EXT_separate_specular_color"))ext.EXT_separate_specular_color=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.ARB_vertex_program)Init_ARB_vertex_program();
free(extensions);
if(ext.z_error)return 0;
return 1;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -