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

📄 oglext.cpp

📁 游戏编程精粹6中关于用自适度二叉树进行空间剖分
💻 CPP
字号:
#include "OGLExt.h"


/* ***************************************************************** *\
|  CONSTRUCTION / DESTRUCTION
\* ***************************************************************** */
cOGLExt::cOGLExt()
{
	m_glGenBuffersARB = (PFNGLGENBUFFERSARBPROC) wglGetProcAddress("glGenBuffersARB");
	m_glBindBufferARB = (PFNGLBINDBUFFERARBPROC) wglGetProcAddress("glBindBufferARB");
	m_glBufferDataARB = (PFNGLBUFFERDATAARBPROC) wglGetProcAddress("glBufferDataARB");
	m_glDeleteBuffersARB = (PFNGLDELETEBUFFERSARBPROC) wglGetProcAddress("glDeleteBuffersARB");
	m_glMapBufferARB =	(PFNGLMAPBUFFERARBPROC)wglGetProcAddress("glMapBufferARB");
	m_glUnmapBufferARB = (PFNGLUNMAPBUFFERARBPROC)wglGetProcAddress("glUnmapBufferARB");
}


cOGLExt::~cOGLExt()
{
	
}


/* ***************************************************************** *\
|  init
|  *****************************************************************
|  Initializes all function pointers again because the constructor
|  could be too early called and wglGetProcAddress could fail.
\* ***************************************************************** */
void cOGLExt::init()
{
	if(!m_glGenBuffersARB)
		m_glGenBuffersARB = (PFNGLGENBUFFERSARBPROC) wglGetProcAddress("glGenBuffersARB");
	if(!m_glBindBufferARB)
		m_glBindBufferARB = (PFNGLBINDBUFFERARBPROC) wglGetProcAddress("glBindBufferARB");
	if(!m_glBufferDataARB)
		m_glBufferDataARB = (PFNGLBUFFERDATAARBPROC) wglGetProcAddress("glBufferDataARB");
	if(!m_glDeleteBuffersARB)
		m_glDeleteBuffersARB = (PFNGLDELETEBUFFERSARBPROC) wglGetProcAddress("glDeleteBuffersARB");
	if(!m_glMapBufferARB)
		m_glMapBufferARB =	(PFNGLMAPBUFFERARBPROC)wglGetProcAddress("glMapBufferARB");
	if(!m_glUnmapBufferARB)
		m_glUnmapBufferARB = (PFNGLUNMAPBUFFERARBPROC)wglGetProcAddress("glUnmapBufferARB");
}


/* ***************************************************************** *\
|  isExtensionSupported
|  *****************************************************************
|  Returns true if the given extension is supported. 
|  Taken from http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=45
\* ***************************************************************** */
bool cOGLExt::isExtensionSupported(const char* szExt)
{
	const unsigned char *pszExtensions = NULL;
	const unsigned char *pszStart;
	unsigned char *pszWhere, *pszTerminator;

	// Extension names should not have spaces
	pszWhere = (unsigned char *) strchr( szExt, ' ' );
	if( pszWhere || *szExt == '\0' )
		return false;

	// Get Extensions String
	pszExtensions = glGetString( GL_EXTENSIONS );

	// Search The Extensions String For An Exact Copy
	pszStart = pszExtensions;
	for(;;)
	{
		pszWhere = (unsigned char *) strstr( (const char *) pszStart, szExt );
		if( !pszWhere )
			break;
		pszTerminator = pszWhere + strlen( szExt );
		if( pszWhere == pszStart || *( pszWhere - 1 ) == ' ' )
			if( *pszTerminator == ' ' || *pszTerminator == '\0' )
				return true;
		pszStart = pszTerminator;
	}
	return false;
}





/* ***************************************************************** *\
|  OpenGL extensions function wrapper
\* ***************************************************************** */
void cOGLExt::glGenBuffersARB(GLsizei n, GLuint *buffers)
{
	if(m_glGenBuffersARB)
		m_glGenBuffersARB(n, buffers);
}

void cOGLExt::glBindBufferARB(GLenum target, GLuint buffer)
{
	if(m_glBindBufferARB)
		m_glBindBufferARB(target, buffer);
}

void cOGLExt::glBufferDataARB(GLenum target, GLsizeiptrARB size, const GLvoid *data, GLenum usage)
{
	if(m_glBufferDataARB)
		m_glBufferDataARB(target, size, data, usage);
}

void cOGLExt::glDeleteBuffersARB(GLsizei n, const GLuint *buffers)
{
	if(m_glDeleteBuffersARB)
		m_glDeleteBuffersARB(n, buffers);
}

GLvoid* cOGLExt::glMapBufferARB(GLenum target, GLenum access)
{
	if(m_glMapBufferARB)
		return m_glMapBufferARB(target, access);

	return NULL;
}

GLboolean cOGLExt::glUnmapBufferARB(GLenum target)
{
	if(m_glUnmapBufferARB)
		return m_glUnmapBufferARB(target);
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -