Commit 480c2847 authored by hybrid's avatar hybrid

Add ARB_framebuffer_object extensions support

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@3913 dfc29bdd-3216-0410-991c-e03cc46cb475
parent 556f367d
...@@ -50,10 +50,17 @@ COpenGLExtensionHandler::COpenGLExtensionHandler() : ...@@ -50,10 +50,17 @@ COpenGLExtensionHandler::COpenGLExtensionHandler() :
pGlStencilFuncSeparate(0), pGlStencilOpSeparate(0), pGlStencilFuncSeparate(0), pGlStencilOpSeparate(0),
pGlStencilFuncSeparateATI(0), pGlStencilOpSeparateATI(0), pGlStencilFuncSeparateATI(0), pGlStencilOpSeparateATI(0),
pGlCompressedTexImage2D(0), pGlCompressedTexImage2D(0),
// ARB framebuffer object
pGlBindFramebuffer(0), pGlDeleteFramebuffers(0), pGlGenFramebuffers(0),
pGlCheckFramebufferStatus(0), pGlFramebufferTexture2D(0),
pGlBindRenderbuffer(0), pGlDeleteRenderbuffers(0), pGlGenRenderbuffers(0),
pGlRenderbufferStorage(0), pGlFramebufferRenderbuffer(0),
// EXT framebuffer object
pGlBindFramebufferEXT(0), pGlDeleteFramebuffersEXT(0), pGlGenFramebuffersEXT(0), pGlBindFramebufferEXT(0), pGlDeleteFramebuffersEXT(0), pGlGenFramebuffersEXT(0),
pGlCheckFramebufferStatusEXT(0), pGlFramebufferTexture2DEXT(0), pGlCheckFramebufferStatusEXT(0), pGlFramebufferTexture2DEXT(0),
pGlBindRenderbufferEXT(0), pGlDeleteRenderbuffersEXT(0), pGlGenRenderbuffersEXT(0), pGlBindRenderbufferEXT(0), pGlDeleteRenderbuffersEXT(0), pGlGenRenderbuffersEXT(0),
pGlRenderbufferStorageEXT(0), pGlFramebufferRenderbufferEXT(0), pGlRenderbufferStorageEXT(0), pGlFramebufferRenderbufferEXT(0),
// MRTs
pGlDrawBuffersARB(0), pGlDrawBuffersATI(0), pGlDrawBuffersARB(0), pGlDrawBuffersATI(0),
pGlGenBuffersARB(0), pGlBindBufferARB(0), pGlBufferDataARB(0), pGlDeleteBuffersARB(0), pGlGenBuffersARB(0), pGlBindBufferARB(0), pGlBufferDataARB(0), pGlDeleteBuffersARB(0),
pGlBufferSubDataARB(0), pGlGetBufferSubDataARB(0), pGlMapBufferARB(0), pGlUnmapBufferARB(0), pGlBufferSubDataARB(0), pGlGetBufferSubDataARB(0), pGlMapBufferARB(0), pGlUnmapBufferARB(0),
...@@ -463,7 +470,18 @@ void COpenGLExtensionHandler::initExtensions(bool stencilBuffer) ...@@ -463,7 +470,18 @@ void COpenGLExtensionHandler::initExtensions(bool stencilBuffer)
// compressed textures // compressed textures
pGlCompressedTexImage2D = (PFNGLCOMPRESSEDTEXIMAGE2DPROC) IRR_OGL_LOAD_EXTENSION("glCompressedTexImage2D"); pGlCompressedTexImage2D = (PFNGLCOMPRESSEDTEXIMAGE2DPROC) IRR_OGL_LOAD_EXTENSION("glCompressedTexImage2D");
// FrameBufferObjects // ARB FrameBufferObjects
pGlBindFramebuffer = (PFNGLBINDFRAMEBUFFERPROC) IRR_OGL_LOAD_EXTENSION("glBindFramebuffer");
pGlDeleteFramebuffers = (PFNGLDELETEFRAMEBUFFERSPROC) IRR_OGL_LOAD_EXTENSION("glDeleteFramebuffers");
pGlGenFramebuffers = (PFNGLGENFRAMEBUFFERSPROC) IRR_OGL_LOAD_EXTENSION("glGenFramebuffers");
pGlCheckFramebufferStatus = (PFNGLCHECKFRAMEBUFFERSTATUSPROC) IRR_OGL_LOAD_EXTENSION("glCheckFramebufferStatus");
pGlFramebufferTexture2D = (PFNGLFRAMEBUFFERTEXTURE2DPROC) IRR_OGL_LOAD_EXTENSION("glFramebufferTexture2D");
pGlBindRenderbuffer = (PFNGLBINDRENDERBUFFERPROC) IRR_OGL_LOAD_EXTENSION("glBindRenderbuffer");
pGlDeleteRenderbuffers = (PFNGLDELETERENDERBUFFERSPROC) IRR_OGL_LOAD_EXTENSION("glDeleteRenderbuffers");
pGlGenRenderbuffers = (PFNGLGENRENDERBUFFERSPROC) IRR_OGL_LOAD_EXTENSION("glGenRenderbuffers");
pGlRenderbufferStorage = (PFNGLRENDERBUFFERSTORAGEPROC) IRR_OGL_LOAD_EXTENSION("glRenderbufferStorage");
pGlFramebufferRenderbuffer = (PFNGLFRAMEBUFFERRENDERBUFFERPROC) IRR_OGL_LOAD_EXTENSION("glFramebufferRenderbuffer");
// EXT FrameBufferObjects
pGlBindFramebufferEXT = (PFNGLBINDFRAMEBUFFEREXTPROC) IRR_OGL_LOAD_EXTENSION("glBindFramebufferEXT"); pGlBindFramebufferEXT = (PFNGLBINDFRAMEBUFFEREXTPROC) IRR_OGL_LOAD_EXTENSION("glBindFramebufferEXT");
pGlDeleteFramebuffersEXT = (PFNGLDELETEFRAMEBUFFERSEXTPROC) IRR_OGL_LOAD_EXTENSION("glDeleteFramebuffersEXT"); pGlDeleteFramebuffersEXT = (PFNGLDELETEFRAMEBUFFERSEXTPROC) IRR_OGL_LOAD_EXTENSION("glDeleteFramebuffersEXT");
pGlGenFramebuffersEXT = (PFNGLGENFRAMEBUFFERSEXTPROC) IRR_OGL_LOAD_EXTENSION("glGenFramebuffersEXT"); pGlGenFramebuffersEXT = (PFNGLGENFRAMEBUFFERSEXTPROC) IRR_OGL_LOAD_EXTENSION("glGenFramebuffersEXT");
......
...@@ -1126,6 +1126,18 @@ class COpenGLExtensionHandler ...@@ -1126,6 +1126,18 @@ class COpenGLExtensionHandler
PFNGLSTENCILFUNCSEPARATEATIPROC pGlStencilFuncSeparateATI; PFNGLSTENCILFUNCSEPARATEATIPROC pGlStencilFuncSeparateATI;
PFNGLSTENCILOPSEPARATEATIPROC pGlStencilOpSeparateATI; PFNGLSTENCILOPSEPARATEATIPROC pGlStencilOpSeparateATI;
PFNGLCOMPRESSEDTEXIMAGE2DPROC pGlCompressedTexImage2D; PFNGLCOMPRESSEDTEXIMAGE2DPROC pGlCompressedTexImage2D;
// ARB framebuffer object
PFNGLBINDFRAMEBUFFERPROC pGlBindFramebuffer;
PFNGLDELETEFRAMEBUFFERSPROC pGlDeleteFramebuffers;
PFNGLGENFRAMEBUFFERSPROC pGlGenFramebuffers;
PFNGLCHECKFRAMEBUFFERSTATUSPROC pGlCheckFramebufferStatus;
PFNGLFRAMEBUFFERTEXTURE2DPROC pGlFramebufferTexture2D;
PFNGLBINDRENDERBUFFERPROC pGlBindRenderbuffer;
PFNGLDELETERENDERBUFFERSPROC pGlDeleteRenderbuffers;
PFNGLGENRENDERBUFFERSPROC pGlGenRenderbuffers;
PFNGLRENDERBUFFERSTORAGEPROC pGlRenderbufferStorage;
PFNGLFRAMEBUFFERRENDERBUFFERPROC pGlFramebufferRenderbuffer;
// EXT framebuffer object
PFNGLBINDFRAMEBUFFEREXTPROC pGlBindFramebufferEXT; PFNGLBINDFRAMEBUFFEREXTPROC pGlBindFramebufferEXT;
PFNGLDELETEFRAMEBUFFERSEXTPROC pGlDeleteFramebuffersEXT; PFNGLDELETEFRAMEBUFFERSEXTPROC pGlDeleteFramebuffersEXT;
PFNGLGENFRAMEBUFFERSEXTPROC pGlGenFramebuffersEXT; PFNGLGENFRAMEBUFFERSEXTPROC pGlGenFramebuffersEXT;
...@@ -1831,8 +1843,12 @@ inline void COpenGLExtensionHandler::extGlCompressedTexImage2D (GLenum target, G ...@@ -1831,8 +1843,12 @@ inline void COpenGLExtensionHandler::extGlCompressedTexImage2D (GLenum target, G
inline void COpenGLExtensionHandler::extGlBindFramebuffer(GLenum target, GLuint framebuffer) inline void COpenGLExtensionHandler::extGlBindFramebuffer(GLenum target, GLuint framebuffer)
{ {
#ifdef _IRR_OPENGL_USE_EXTPOINTER_ #ifdef _IRR_OPENGL_USE_EXTPOINTER_
if (pGlBindFramebufferEXT) if (pGlBindFramebuffer)
pGlBindFramebuffer(target, framebuffer);
else if (pGlBindFramebufferEXT)
pGlBindFramebufferEXT(target, framebuffer); pGlBindFramebufferEXT(target, framebuffer);
#elif defined(GL_ARB_framebuffer_object)
glBindFramebufferARB(target, framebuffer);
#elif defined(GL_EXT_framebuffer_object) #elif defined(GL_EXT_framebuffer_object)
glBindFramebufferEXT(target, framebuffer); glBindFramebufferEXT(target, framebuffer);
#else #else
...@@ -1843,8 +1859,12 @@ inline void COpenGLExtensionHandler::extGlBindFramebuffer(GLenum target, GLuint ...@@ -1843,8 +1859,12 @@ inline void COpenGLExtensionHandler::extGlBindFramebuffer(GLenum target, GLuint
inline void COpenGLExtensionHandler::extGlDeleteFramebuffers(GLsizei n, const GLuint *framebuffers) inline void COpenGLExtensionHandler::extGlDeleteFramebuffers(GLsizei n, const GLuint *framebuffers)
{ {
#ifdef _IRR_OPENGL_USE_EXTPOINTER_ #ifdef _IRR_OPENGL_USE_EXTPOINTER_
if (pGlDeleteFramebuffersEXT) if (pGlDeleteFramebuffers)
pGlDeleteFramebuffers(n, framebuffers);
else if (pGlDeleteFramebuffersEXT)
pGlDeleteFramebuffersEXT(n, framebuffers); pGlDeleteFramebuffersEXT(n, framebuffers);
#elif defined(GL_ARB_framebuffer_object)
glDeleteFramebuffersARB(n, framebuffers);
#elif defined(GL_EXT_framebuffer_object) #elif defined(GL_EXT_framebuffer_object)
glDeleteFramebuffersEXT(n, framebuffers); glDeleteFramebuffersEXT(n, framebuffers);
#else #else
...@@ -1855,8 +1875,12 @@ inline void COpenGLExtensionHandler::extGlDeleteFramebuffers(GLsizei n, const GL ...@@ -1855,8 +1875,12 @@ inline void COpenGLExtensionHandler::extGlDeleteFramebuffers(GLsizei n, const GL
inline void COpenGLExtensionHandler::extGlGenFramebuffers(GLsizei n, GLuint *framebuffers) inline void COpenGLExtensionHandler::extGlGenFramebuffers(GLsizei n, GLuint *framebuffers)
{ {
#ifdef _IRR_OPENGL_USE_EXTPOINTER_ #ifdef _IRR_OPENGL_USE_EXTPOINTER_
if (pGlGenFramebuffersEXT) if (pGlGenFramebuffers)
pGlGenFramebuffers(n, framebuffers);
else if (pGlGenFramebuffersEXT)
pGlGenFramebuffersEXT(n, framebuffers); pGlGenFramebuffersEXT(n, framebuffers);
#elif defined(GL_ARB_framebuffer_object)
glGenFramebuffersARB(n, framebuffers);
#elif defined(GL_EXT_framebuffer_object) #elif defined(GL_EXT_framebuffer_object)
glGenFramebuffersEXT(n, framebuffers); glGenFramebuffersEXT(n, framebuffers);
#else #else
...@@ -1867,10 +1891,14 @@ inline void COpenGLExtensionHandler::extGlGenFramebuffers(GLsizei n, GLuint *fra ...@@ -1867,10 +1891,14 @@ inline void COpenGLExtensionHandler::extGlGenFramebuffers(GLsizei n, GLuint *fra
inline GLenum COpenGLExtensionHandler::extGlCheckFramebufferStatus(GLenum target) inline GLenum COpenGLExtensionHandler::extGlCheckFramebufferStatus(GLenum target)
{ {
#ifdef _IRR_OPENGL_USE_EXTPOINTER_ #ifdef _IRR_OPENGL_USE_EXTPOINTER_
if (pGlCheckFramebufferStatusEXT) if (pGlCheckFramebufferStatus)
return pGlCheckFramebufferStatus(target);
else if (pGlCheckFramebufferStatusEXT)
return pGlCheckFramebufferStatusEXT(target); return pGlCheckFramebufferStatusEXT(target);
else else
return 0; return 0;
#elif defined(GL_ARB_framebuffer_object)
return glCheckFramebufferStatusARB(target);
#elif defined(GL_EXT_framebuffer_object) #elif defined(GL_EXT_framebuffer_object)
return glCheckFramebufferStatusEXT(target); return glCheckFramebufferStatusEXT(target);
#else #else
...@@ -1882,8 +1910,12 @@ inline GLenum COpenGLExtensionHandler::extGlCheckFramebufferStatus(GLenum target ...@@ -1882,8 +1910,12 @@ inline GLenum COpenGLExtensionHandler::extGlCheckFramebufferStatus(GLenum target
inline void COpenGLExtensionHandler::extGlFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) inline void COpenGLExtensionHandler::extGlFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
{ {
#ifdef _IRR_OPENGL_USE_EXTPOINTER_ #ifdef _IRR_OPENGL_USE_EXTPOINTER_
if (pGlFramebufferTexture2DEXT) if (pGlFramebufferTexture2D)
pGlFramebufferTexture2D(target, attachment, textarget, texture, level);
else if (pGlFramebufferTexture2DEXT)
pGlFramebufferTexture2DEXT(target, attachment, textarget, texture, level); pGlFramebufferTexture2DEXT(target, attachment, textarget, texture, level);
#elif defined(GL_ARB_framebuffer_object)
glFramebufferTexture2DARB(target, attachment, textarget, texture, level);
#elif defined(GL_EXT_framebuffer_object) #elif defined(GL_EXT_framebuffer_object)
glFramebufferTexture2DEXT(target, attachment, textarget, texture, level); glFramebufferTexture2DEXT(target, attachment, textarget, texture, level);
#else #else
...@@ -1894,8 +1926,12 @@ inline void COpenGLExtensionHandler::extGlFramebufferTexture2D(GLenum target, GL ...@@ -1894,8 +1926,12 @@ inline void COpenGLExtensionHandler::extGlFramebufferTexture2D(GLenum target, GL
inline void COpenGLExtensionHandler::extGlBindRenderbuffer(GLenum target, GLuint renderbuffer) inline void COpenGLExtensionHandler::extGlBindRenderbuffer(GLenum target, GLuint renderbuffer)
{ {
#ifdef _IRR_OPENGL_USE_EXTPOINTER_ #ifdef _IRR_OPENGL_USE_EXTPOINTER_
if (pGlBindRenderbufferEXT) if (pGlBindRenderbuffer)
pGlBindRenderbuffer(target, renderbuffer);
else if (pGlBindRenderbufferEXT)
pGlBindRenderbufferEXT(target, renderbuffer); pGlBindRenderbufferEXT(target, renderbuffer);
#elif defined(GL_ARB_framebuffer_object)
glBindRenderbufferARB(target, renderbuffer);
#elif defined(GL_EXT_framebuffer_object) #elif defined(GL_EXT_framebuffer_object)
glBindRenderbufferEXT(target, renderbuffer); glBindRenderbufferEXT(target, renderbuffer);
#else #else
...@@ -1906,8 +1942,12 @@ inline void COpenGLExtensionHandler::extGlBindRenderbuffer(GLenum target, GLuint ...@@ -1906,8 +1942,12 @@ inline void COpenGLExtensionHandler::extGlBindRenderbuffer(GLenum target, GLuint
inline void COpenGLExtensionHandler::extGlDeleteRenderbuffers(GLsizei n, const GLuint *renderbuffers) inline void COpenGLExtensionHandler::extGlDeleteRenderbuffers(GLsizei n, const GLuint *renderbuffers)
{ {
#ifdef _IRR_OPENGL_USE_EXTPOINTER_ #ifdef _IRR_OPENGL_USE_EXTPOINTER_
if (pGlDeleteRenderbuffersEXT) if (pGlDeleteRenderbuffers)
pGlDeleteRenderbuffers(n, renderbuffers);
else if (pGlDeleteRenderbuffersEXT)
pGlDeleteRenderbuffersEXT(n, renderbuffers); pGlDeleteRenderbuffersEXT(n, renderbuffers);
#elif defined(GL_ARB_framebuffer_object)
glDeleteRenderbuffersARB(n, renderbuffers);
#elif defined(GL_EXT_framebuffer_object) #elif defined(GL_EXT_framebuffer_object)
glDeleteRenderbuffersEXT(n, renderbuffers); glDeleteRenderbuffersEXT(n, renderbuffers);
#else #else
...@@ -1918,8 +1958,12 @@ inline void COpenGLExtensionHandler::extGlDeleteRenderbuffers(GLsizei n, const G ...@@ -1918,8 +1958,12 @@ inline void COpenGLExtensionHandler::extGlDeleteRenderbuffers(GLsizei n, const G
inline void COpenGLExtensionHandler::extGlGenRenderbuffers(GLsizei n, GLuint *renderbuffers) inline void COpenGLExtensionHandler::extGlGenRenderbuffers(GLsizei n, GLuint *renderbuffers)
{ {
#ifdef _IRR_OPENGL_USE_EXTPOINTER_ #ifdef _IRR_OPENGL_USE_EXTPOINTER_
if (pGlGenRenderbuffersEXT) if (pGlGenRenderbuffers)
pGlGenRenderbuffers(n, renderbuffers);
else if (pGlGenRenderbuffersEXT)
pGlGenRenderbuffersEXT(n, renderbuffers); pGlGenRenderbuffersEXT(n, renderbuffers);
#elif defined(GL_ARB_framebuffer_object)
glGenRenderbuffersARB(n, renderbuffers);
#elif defined(GL_EXT_framebuffer_object) #elif defined(GL_EXT_framebuffer_object)
glGenRenderbuffersEXT(n, renderbuffers); glGenRenderbuffersEXT(n, renderbuffers);
#else #else
...@@ -1930,8 +1974,12 @@ inline void COpenGLExtensionHandler::extGlGenRenderbuffers(GLsizei n, GLuint *re ...@@ -1930,8 +1974,12 @@ inline void COpenGLExtensionHandler::extGlGenRenderbuffers(GLsizei n, GLuint *re
inline void COpenGLExtensionHandler::extGlRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height) inline void COpenGLExtensionHandler::extGlRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height)
{ {
#ifdef _IRR_OPENGL_USE_EXTPOINTER_ #ifdef _IRR_OPENGL_USE_EXTPOINTER_
if (pGlRenderbufferStorageEXT) if (pGlRenderbufferStorage)
pGlRenderbufferStorage(target, internalformat, width, height);
else if (pGlRenderbufferStorageEXT)
pGlRenderbufferStorageEXT(target, internalformat, width, height); pGlRenderbufferStorageEXT(target, internalformat, width, height);
#elif defined(GL_ARB_framebuffer_object)
glRenderbufferStorageARB(target, internalformat, width, height);
#elif defined(GL_EXT_framebuffer_object) #elif defined(GL_EXT_framebuffer_object)
glRenderbufferStorageEXT(target, internalformat, width, height); glRenderbufferStorageEXT(target, internalformat, width, height);
#else #else
...@@ -1942,8 +1990,12 @@ inline void COpenGLExtensionHandler::extGlRenderbufferStorage(GLenum target, GLe ...@@ -1942,8 +1990,12 @@ inline void COpenGLExtensionHandler::extGlRenderbufferStorage(GLenum target, GLe
inline void COpenGLExtensionHandler::extGlFramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) inline void COpenGLExtensionHandler::extGlFramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
{ {
#ifdef _IRR_OPENGL_USE_EXTPOINTER_ #ifdef _IRR_OPENGL_USE_EXTPOINTER_
if (pGlFramebufferRenderbufferEXT) if (pGlFramebufferRenderbuffer)
pGlFramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer);
else if (pGlFramebufferRenderbufferEXT)
pGlFramebufferRenderbufferEXT(target, attachment, renderbuffertarget, renderbuffer); pGlFramebufferRenderbufferEXT(target, attachment, renderbuffertarget, renderbuffer);
#elif defined(GL_ARB_framebuffer_object)
glFramebufferRenderbufferARB(target, attachment, renderbuffertarget, renderbuffer);
#elif defined(GL_EXT_framebuffer_object) #elif defined(GL_EXT_framebuffer_object)
glFramebufferRenderbufferEXT(target, attachment, renderbuffertarget, renderbuffer); glFramebufferRenderbufferEXT(target, attachment, renderbuffertarget, renderbuffer);
#else #else
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment