⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 extgl.cpp

📁 environment_mapped_bump_mapping using opengl
💻 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 + -