bool initExtensions()
{
    const char* extensions = (const char*)glGetString(GL_EXTENSIONS);

    CCLOG(extensions);

    if(!LOAD_EXTENSION(PFNGLGENERATEMIPMAPOESPROC, glGenerateMipmapOES))
        NULL_EXTENSION(glGenerateMipmapOES);

    if(!LOAD_EXTENSION(PFNGLGENFRAMEBUFFERSOESPROC, glGenFramebuffersOES))
        NULL_EXTENSION(glGenFramebuffersOES);

    if(!LOAD_EXTENSION(PFNGLBINDFRAMEBUFFEROESPROC, glBindFramebufferOES))
        NULL_EXTENSION(glBindFramebufferOES);

    if(!LOAD_EXTENSION(PFNGLFRAMEBUFFERTEXTURE2DOESPROC, glFramebufferTexture2DOES))
        NULL_EXTENSION(glFramebufferTexture2DOES);

    if(!LOAD_EXTENSION(PFNGLDELETEFRAMEBUFFERSOESPROC, glDeleteFramebuffersOES))
        NULL_EXTENSION(glDeleteFramebuffersOES);

    if(!LOAD_EXTENSION(PFNGLCHECKFRAMEBUFFERSTATUSOESPROC, glCheckFramebufferStatusOES))
        NULL_EXTENSION(glCheckFramebufferStatusOES);

    return true;
}
예제 #2
0
void LoadOpenGLExt()
{
#define LOAD_EXTENSION(funcType, funcName) (funcName = (funcType) wglGetProcAddress( #funcName ))

	g_GLExtensions = (char *) glGetString(GL_EXTENSIONS);


	LOAD_EXTENSION(PFNGLDRAWRANGEELEMENTSEXTPROC,	glDrawRangeElements);

	// GL_ARB_multitexture
	LOAD_EXTENSION(PFNGLACTIVETEXTUREARBPROC,       glActiveTextureARB);
	LOAD_EXTENSION(PFNGLCLIENTACTIVETEXTUREARBPROC, glClientActiveTextureARB);
	LOAD_EXTENSION(PFNGLMULTITEXCOORD1FARBPROC,		glMultiTexCoord1fARB);
	LOAD_EXTENSION(PFNGLMULTITEXCOORD1FVARBPROC,	glMultiTexCoord1fvARB);
	LOAD_EXTENSION(PFNGLMULTITEXCOORD2FARBPROC,		glMultiTexCoord2fARB);
	LOAD_EXTENSION(PFNGLMULTITEXCOORD2FVARBPROC,	glMultiTexCoord2fvARB);
	LOAD_EXTENSION(PFNGLMULTITEXCOORD3FARBPROC,		glMultiTexCoord3fARB);
	LOAD_EXTENSION(PFNGLMULTITEXCOORD3FVARBPROC,	glMultiTexCoord3fvARB);
	LOAD_EXTENSION(PFNGLMULTITEXCOORD4FARBPROC,		glMultiTexCoord4fARB);
	LOAD_EXTENSION(PFNGLMULTITEXCOORD4FVARBPROC,	glMultiTexCoord4fvARB);

	// GL_ARB_texture_compression
	LOAD_EXTENSION(PFNGLCOMPRESSEDTEXIMAGE1DARBPROC, glCompressedTexImage1DARB);
	LOAD_EXTENSION(PFNGLCOMPRESSEDTEXIMAGE2DARBPROC, glCompressedTexImage2DARB);
	LOAD_EXTENSION(PFNGLCOMPRESSEDTEXIMAGE3DARBPROC, glCompressedTexImage3DARB);
	LOAD_EXTENSION(PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC, glCompressedTexSubImage1DARB);
	LOAD_EXTENSION(PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC, glCompressedTexSubImage2DARB);
	LOAD_EXTENSION(PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC, glCompressedTexSubImage3DARB);
	LOAD_EXTENSION(PFNGLGETCOMPRESSEDTEXIMAGEARBPROC, glGetCompressedTexImageARB);

	// GL_ARB_vertex_buffer_object
	LOAD_EXTENSION(PFNGLBINDBUFFERARBPROC, glBindBufferARB);
	LOAD_EXTENSION(PFNGLDELETEBUFFERSARBPROC, glDeleteBuffersARB);
	LOAD_EXTENSION(PFNGLGENBUFFERSARBPROC, glGenBuffersARB);
	LOAD_EXTENSION(PFNGLISBUFFERARBPROC, glIsBufferARB);
	LOAD_EXTENSION(PFNGLBUFFERDATAARBPROC, glBufferDataARB);
	LOAD_EXTENSION(PFNGLBUFFERSUBDATAARBPROC, glBufferSubDataARB);
	LOAD_EXTENSION(PFNGLGETBUFFERSUBDATAARBPROC, glGetBufferSubDataARB);
	LOAD_EXTENSION(PFNGLMAPBUFFERARBPROC, glMapBufferARB);
	LOAD_EXTENSION(PFNGLUNMAPBUFFERARBPROC, glUnmapBufferARB);
	LOAD_EXTENSION(PFNGLGETBUFFERPARAMETERIVARBPROC, glGetBufferParameterivARB);
	LOAD_EXTENSION(PFNGLGETBUFFERPOINTERVARBPROC, glGetBufferPointervARB);

	// WGL_ARB_make_current_read
	LOAD_EXTENSION(PFNWGLMAKECONTEXTCURRENTARBPROC,	wglMakeContextCurrentARB);
	LOAD_EXTENSION(PFNWGLGETCURRENTREADDCARBPROC,	wglGetCurrentReadDCARB);

	// WGL_ARB_pixel_format
	LOAD_EXTENSION(PFNWGLGETPIXELFORMATATTRIBIVARBPROC, wglGetPixelFormatAttribivARB);
	LOAD_EXTENSION(PFNWGLGETPIXELFORMATATTRIBFVARBPROC, wglGetPixelFormatAttribfvARB);
	LOAD_EXTENSION(PFNWGLCHOOSEPIXELFORMATARBPROC,      wglChoosePixelFormatARB);

	// WGL_ARB_pbuffer
	LOAD_EXTENSION(PFNWGLCREATEPBUFFERARBPROC,		wglCreatePbufferARB);
	LOAD_EXTENSION(PFNWGLDESTROYPBUFFERARBPROC,		wglDestroyPbufferARB);
	LOAD_EXTENSION(PFNWGLGETPBUFFERDCARBPROC,		wglGetPbufferDCARB);
	LOAD_EXTENSION(PFNWGLRELEASEPBUFFERDCARBPROC,	wglReleasePbufferDCARB);
	LOAD_EXTENSION(PFNWGLQUERYPBUFFERARBPROC,		wglQueryPbufferARB);

	// WGL_ARB_render_texture
	LOAD_EXTENSION(PFNWGLBINDTEXIMAGEARBPROC,     wglBindTexImageARB);
	LOAD_EXTENSION(PFNWGLRELEASETEXIMAGEARBPROC,  wglReleaseTexImageARB);
	LOAD_EXTENSION(PFNWGLSETPBUFFERATTRIBARBPROC, wglSetPbufferAttribARB);

	// ARB_point_sprite
	LOAD_EXTENSION(PFNGLPOINTPARAMETERFARBPROC, glPointParameterfARB);
	LOAD_EXTENSION(PFNGLPOINTPARAMETERFVARBPROC, glPointParameterfvARB);

/*
===============================================================================
	SHADER
===============================================================================
*/
	LOAD_EXTENSION(PFNGLCREATEPROGRAMOBJECTARBPROC, glCreateProgramObjectARB);
    LOAD_EXTENSION(PFNGLCREATESHADEROBJECTARBPROC, glCreateShaderObjectARB);
    LOAD_EXTENSION(PFNGLDELETEOBJECTARBPROC, glDeleteObjectARB);
    LOAD_EXTENSION(PFNGLDETACHOBJECTARBPROC, glDetachObjectARB);
    LOAD_EXTENSION(PFNGLATTACHOBJECTARBPROC, glAttachObjectARB);
    LOAD_EXTENSION(PFNGLSHADERSOURCEARBPROC, glShaderSourceARB);
    LOAD_EXTENSION(PFNGLCOMPILESHADERARBPROC, glCompileShaderARB);
    LOAD_EXTENSION(PFNGLLINKPROGRAMARBPROC, glLinkProgramARB);
    LOAD_EXTENSION(PFNGLGETINFOLOGARBPROC, glGetInfoLogARB);
    LOAD_EXTENSION(PFNGLUSEPROGRAMOBJECTARBPROC, glUseProgramObjectARB);
    LOAD_EXTENSION(PFNGLGETOBJECTPARAMETERIVARBPROC, glGetObjectParameterivARB);
    LOAD_EXTENSION(PFNGLGETOBJECTPARAMETERFVARBPROC, glGetObjectParameterfvARB);
    LOAD_EXTENSION(PFNGLGETUNIFORMLOCATIONARBPROC, glGetUniformLocationARB);
    LOAD_EXTENSION(PFNGLGETATTRIBLOCATIONARBPROC, glGetAttribLocationARB);
    LOAD_EXTENSION(PFNGLBINDATTRIBLOCATIONARBPROC, glBindAttribLocationARB);
    LOAD_EXTENSION(PFNGLUNIFORM1FARBPROC, glUniform1fARB);
    LOAD_EXTENSION(PFNGLUNIFORM2FARBPROC, glUniform2fARB);
    LOAD_EXTENSION(PFNGLUNIFORM3FARBPROC, glUniform3fARB);
    LOAD_EXTENSION(PFNGLUNIFORM4FARBPROC, glUniform4fARB);
    LOAD_EXTENSION(PFNGLUNIFORM1IARBPROC, glUniform1iARB);
    LOAD_EXTENSION(PFNGLUNIFORM2IARBPROC, glUniform2iARB);
    LOAD_EXTENSION(PFNGLUNIFORM3IARBPROC, glUniform3iARB);
    LOAD_EXTENSION(PFNGLUNIFORM4IARBPROC, glUniform4iARB);
    LOAD_EXTENSION(PFNGLUNIFORM1FVARBPROC, glUniform1fvARB);
    LOAD_EXTENSION(PFNGLUNIFORM2FVARBPROC, glUniform2fvARB);
    LOAD_EXTENSION(PFNGLUNIFORM3FVARBPROC, glUniform3fvARB);
    LOAD_EXTENSION(PFNGLUNIFORM4FVARBPROC, glUniform4fvARB);
    LOAD_EXTENSION(PFNGLUNIFORM1IVARBPROC, glUniform1ivARB);
    LOAD_EXTENSION(PFNGLUNIFORM2IVARBPROC, glUniform2ivARB);
    LOAD_EXTENSION(PFNGLUNIFORM3IVARBPROC, glUniform3ivARB);
    LOAD_EXTENSION(PFNGLUNIFORM4IVARBPROC, glUniform4ivARB);
	LOAD_EXTENSION(PFNGLUNIFORMMATRIX2FVARBPROC, glUniformMatrix2fvARB);
	LOAD_EXTENSION(PFNGLUNIFORMMATRIX3FVARBPROC, glUniformMatrix3fvARB);
	LOAD_EXTENSION(PFNGLUNIFORMMATRIX4FVARBPROC, glUniformMatrix4fvARB);
    LOAD_EXTENSION(PFNGLVERTEXATTRIB4FVARBPROC, glVertexAttrib4fvARB);
    LOAD_EXTENSION(PFNGLVERTEXATTRIB3FVARBPROC, glVertexAttrib3fvARB);
    LOAD_EXTENSION(PFNGLVERTEXATTRIB2FVARBPROC, glVertexAttrib2fvARB);
    LOAD_EXTENSION(PFNGLVERTEXATTRIB1FVARBPROC, glVertexAttrib1fvARB);
    LOAD_EXTENSION(PFNGLVERTEXATTRIB4FARBPROC, glVertexAttrib4fARB);
    LOAD_EXTENSION(PFNGLVERTEXATTRIB3FARBPROC, glVertexAttrib3fARB);
    LOAD_EXTENSION(PFNGLVERTEXATTRIB2FARBPROC, glVertexAttrib2fARB);
    LOAD_EXTENSION(PFNGLVERTEXATTRIB1FARBPROC, glVertexAttrib1fARB);

	LOAD_EXTENSION(PFNGLVERTEXATTRIBPOINTERARBPROC, glVertexAttribPointerARB);
	LOAD_EXTENSION(PFNGLENABLEVERTEXATTRIBARRAYARBPROC, glEnableVertexAttribArrayARB);
	LOAD_EXTENSION(PFNGLDISABLEVERTEXATTRIBARRAYARBPROC, glDisableVertexAttribArrayARB);

	LOAD_EXTENSION(PFNGLISRENDERBUFFEREXTPROC, glIsRenderbufferEXT);
	LOAD_EXTENSION(PFNGLBINDRENDERBUFFEREXTPROC, glBindRenderbufferEXT);
	LOAD_EXTENSION(PFNGLDELETERENDERBUFFERSEXTPROC, glDeleteRenderbuffersEXT);
	LOAD_EXTENSION(PFNGLGENRENDERBUFFERSEXTPROC, glGenRenderbuffersEXT);
	LOAD_EXTENSION(PFNGLRENDERBUFFERSTORAGEEXTPROC, glRenderbufferStorageEXT);
	LOAD_EXTENSION(PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC, glGetRenderbufferParameterivEXT);
	LOAD_EXTENSION(PFNGLISFRAMEBUFFEREXTPROC, glIsFramebufferEXT);
	LOAD_EXTENSION(PFNGLBINDFRAMEBUFFEREXTPROC, glBindFramebufferEXT);
	LOAD_EXTENSION(PFNGLDELETEFRAMEBUFFERSEXTPROC, glDeleteFramebuffersEXT);
	LOAD_EXTENSION(PFNGLGENFRAMEBUFFERSEXTPROC, glGenFramebuffersEXT);
	LOAD_EXTENSION(PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC, glCheckFramebufferStatusEXT);
	LOAD_EXTENSION(PFNGLFRAMEBUFFERTEXTURE1DEXTPROC, glFramebufferTexture1DEXT);
	LOAD_EXTENSION(PFNGLFRAMEBUFFERTEXTURE2DEXTPROC, glFramebufferTexture2DEXT);
	LOAD_EXTENSION(PFNGLFRAMEBUFFERTEXTURE3DEXTPROC, glFramebufferTexture3DEXT);
	LOAD_EXTENSION(PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC, glFramebufferRenderbufferEXT);
	LOAD_EXTENSION(PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC, glGetFramebufferAttachmentParameterivEXT);
	LOAD_EXTENSION(PFNGLGENERATEMIPMAPEXTPROC, glGenerateMipmapEXT);

#undef LOAD_EXTENSION
}