Add support for GL_EXT_framebuffer_object, needed for mipmaps.
svn path=/branches/work/kwin_composite/; revision=629450
This commit is contained in:
parent
2dce2b7f26
commit
1e2d811cea
4 changed files with 109 additions and 5 deletions
70
glutils.cpp
70
glutils.cpp
|
@ -34,13 +34,31 @@ glXQueryDrawable_func glXQueryDrawable;
|
|||
// texture_from_pixmap extension functions
|
||||
glXReleaseTexImageEXT_func glXReleaseTexImageEXT;
|
||||
glXBindTexImageEXT_func glXBindTexImageEXT;
|
||||
// glActiveTexture
|
||||
glActiveTexture_func glActiveTexture;
|
||||
// glXCopySubBufferMESA
|
||||
glXCopySubBuffer_func glXCopySubBuffer;
|
||||
// video_sync extension functions
|
||||
glXGetVideoSync_func glXGetVideoSync;
|
||||
glXWaitVideoSync_func glXWaitVideoSync;
|
||||
// glActiveTexture
|
||||
glActiveTexture_func glActiveTexture;
|
||||
// framebuffer_object extension functions
|
||||
glIsRenderbuffer_func glIsRenderbuffer;
|
||||
glBindRenderbuffer_func glBindRenderbuffer;
|
||||
glDeleteRenderbuffers_func glDeleteRenderbuffers;
|
||||
glGenRenderbuffers_func glGenRenderbuffers;
|
||||
glRenderbufferStorage_func glRenderbufferStorage;
|
||||
glGetRenderbufferParameteriv_func glGetRenderbufferParameteriv;
|
||||
glIsFramebuffer_func glIsFramebuffer;
|
||||
glBindFramebuffer_func glBindFramebuffer;
|
||||
glDeleteFramebuffers_func glDeleteFramebuffers;
|
||||
glGenFramebuffers_func glGenFramebuffers;
|
||||
glCheckFramebufferStatus_func glCheckFramebufferStatus;
|
||||
glFramebufferTexture1D_func glFramebufferTexture1D;
|
||||
glFramebufferTexture2D_func glFramebufferTexture2D;
|
||||
glFramebufferTexture3D_func glFramebufferTexture3D;
|
||||
glFramebufferRenderbuffer_func glFramebufferRenderbuffer;
|
||||
glGetFramebufferAttachmentParameteriv_func glGetFramebufferAttachmentParameteriv;
|
||||
glGenerateMipmap_func glGenerateMipmap;
|
||||
|
||||
|
||||
// Functions
|
||||
|
@ -119,6 +137,54 @@ void initGL()
|
|||
glActiveTexture = NULL;
|
||||
glTextureUnitsCount = 0;
|
||||
}
|
||||
if( hasGLExtension( "GL_EXT_framebuffer_object" ))
|
||||
{
|
||||
glIsRenderbuffer = (glIsRenderbuffer_func) getProcAddress( "glIsRenderbufferEXT" );
|
||||
glBindRenderbuffer = (glBindRenderbuffer_func) getProcAddress( "glBindRenderbufferEXT" );
|
||||
glDeleteRenderbuffers = (glDeleteRenderbuffers_func) getProcAddress( "glDeleteRenderbuffersEXT" );
|
||||
glGenRenderbuffers = (glGenRenderbuffers_func) getProcAddress( "glGenRenderbuffersEXT" );
|
||||
|
||||
glRenderbufferStorage = (glRenderbufferStorage_func) getProcAddress( "glRenderbufferStorageEXT" );
|
||||
|
||||
glGetRenderbufferParameteriv = (glGetRenderbufferParameteriv_func) getProcAddress( "glGetRenderbufferParameterivEXT" );
|
||||
|
||||
glIsFramebuffer = (glIsFramebuffer_func) getProcAddress( "glIsFramebufferEXT" );
|
||||
glBindFramebuffer = (glBindFramebuffer_func) getProcAddress( "glBindFramebufferEXT" );
|
||||
glDeleteFramebuffers = (glDeleteFramebuffers_func) getProcAddress( "glDeleteFramebuffersEXT" );
|
||||
glGenFramebuffers = (glGenFramebuffers_func) getProcAddress( "glGenFramebuffersEXT" );
|
||||
|
||||
glCheckFramebufferStatus = (glCheckFramebufferStatus_func) getProcAddress( "glCheckFramebufferStatusEXT" );
|
||||
|
||||
glFramebufferTexture1D = (glFramebufferTexture1D_func) getProcAddress( "glFramebufferTexture1DEXT" );
|
||||
glFramebufferTexture2D = (glFramebufferTexture2D_func) getProcAddress( "glFramebufferTexture2DEXT" );
|
||||
glFramebufferTexture3D = (glFramebufferTexture3D_func) getProcAddress( "glFramebufferTexture3DEXT" );
|
||||
|
||||
glFramebufferRenderbuffer = (glFramebufferRenderbuffer_func) getProcAddress( "glFramebufferRenderbufferEXT" );
|
||||
|
||||
glGetFramebufferAttachmentParameteriv = (glGetFramebufferAttachmentParameteriv_func) getProcAddress( "glGetFramebufferAttachmentParameterivEXT" );
|
||||
|
||||
glGenerateMipmap = (glGenerateMipmap_func) getProcAddress( "glGenerateMipmapEXT" );
|
||||
}
|
||||
else
|
||||
{
|
||||
glIsRenderbuffer = NULL;
|
||||
glBindRenderbuffer = NULL;
|
||||
glDeleteRenderbuffers = NULL;
|
||||
glGenRenderbuffers = NULL;
|
||||
glRenderbufferStorage = NULL;
|
||||
glGetRenderbufferParameteriv = NULL;
|
||||
glIsFramebuffer = NULL;
|
||||
glBindFramebuffer = NULL;
|
||||
glDeleteFramebuffers = NULL;
|
||||
glGenFramebuffers = NULL;
|
||||
glCheckFramebufferStatus = NULL;
|
||||
glFramebufferTexture1D = NULL;
|
||||
glFramebufferTexture2D = NULL;
|
||||
glFramebufferTexture3D = NULL;
|
||||
glFramebufferRenderbuffer = NULL;
|
||||
glGetFramebufferAttachmentParameteriv = NULL;
|
||||
glGenerateMipmap = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
bool hasGLVersion(int major, int minor, int release)
|
||||
|
|
41
glutils.h
41
glutils.h
|
@ -88,9 +88,6 @@ typedef void (*glXBindTexImageEXT_func)( Display* dpy, GLXDrawable drawable,
|
|||
typedef void (*glXReleaseTexImageEXT_func)( Display* dpy, GLXDrawable drawable, int buffer );
|
||||
extern glXReleaseTexImageEXT_func glXReleaseTexImageEXT;
|
||||
extern glXBindTexImageEXT_func glXBindTexImageEXT;
|
||||
// glActiveTexture
|
||||
typedef void (*glActiveTexture_func)(GLenum);
|
||||
extern glActiveTexture_func glActiveTexture;
|
||||
// glXCopySubBufferMESA
|
||||
typedef void (*glXCopySubBuffer_func) ( Display* , GLXDrawable, int, int, int, int );
|
||||
extern glXCopySubBuffer_func glXCopySubBuffer;
|
||||
|
@ -99,6 +96,44 @@ typedef void (*glXGetVideoSync_func)( unsigned int *count );
|
|||
typedef void (*glXWaitVideoSync_func)( int divisor, int remainder, unsigned int *count );
|
||||
extern glXGetVideoSync_func glXGetVideoSync;
|
||||
extern glXWaitVideoSync_func glXWaitVideoSync;
|
||||
// glActiveTexture
|
||||
typedef void (*glActiveTexture_func)(GLenum);
|
||||
extern glActiveTexture_func glActiveTexture;
|
||||
// framebuffer_object extension functions
|
||||
typedef bool (*glIsRenderbuffer_func)( GLuint renderbuffer );
|
||||
typedef void (*glBindRenderbuffer_func)( GLenum target, GLuint renderbuffer );
|
||||
typedef void (*glDeleteRenderbuffers_func)( GLsizei n, const GLuint *renderbuffers );
|
||||
typedef void (*glGenRenderbuffers_func)( GLsizei n, GLuint *renderbuffers );
|
||||
typedef void (*glRenderbufferStorage_func)( GLenum target, GLenum internalformat, GLsizei width, GLsizei height );
|
||||
typedef void (*glGetRenderbufferParameteriv_func)( GLenum target, GLenum pname, GLint *params );
|
||||
typedef bool (*glIsFramebuffer_func)( GLuint framebuffer );
|
||||
typedef void (*glBindFramebuffer_func)( GLenum target, GLuint framebuffer );
|
||||
typedef void (*glDeleteFramebuffers_func)( GLsizei n, const GLuint *framebuffers );
|
||||
typedef void (*glGenFramebuffers_func)( GLsizei n, GLuint *framebuffers );
|
||||
typedef void (*glCheckFramebufferStatus_func)( GLenum target );
|
||||
typedef void (*glFramebufferTexture1D_func)( GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level );
|
||||
typedef void (*glFramebufferTexture2D_func)( GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level );
|
||||
typedef void (*glFramebufferTexture3D_func)( GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset );
|
||||
typedef void (*glFramebufferRenderbuffer_func)( GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer );
|
||||
typedef void (*glGetFramebufferAttachmentParameteriv_func)( GLenum target, GLenum attachment, GLenum pname, GLint *params );
|
||||
typedef void (*glGenerateMipmap_func)( GLenum target );
|
||||
extern glIsRenderbuffer_func glIsRenderbuffer;
|
||||
extern glBindRenderbuffer_func glBindRenderbuffer;
|
||||
extern glDeleteRenderbuffers_func glDeleteRenderbuffers;
|
||||
extern glGenRenderbuffers_func glGenRenderbuffers;
|
||||
extern glRenderbufferStorage_func glRenderbufferStorage;
|
||||
extern glGetRenderbufferParameteriv_func glGetRenderbufferParameteriv;
|
||||
extern glIsFramebuffer_func glIsFramebuffer;
|
||||
extern glBindFramebuffer_func glBindFramebuffer;
|
||||
extern glDeleteFramebuffers_func glDeleteFramebuffers;
|
||||
extern glGenFramebuffers_func glGenFramebuffers;
|
||||
extern glCheckFramebufferStatus_func glCheckFramebufferStatus;
|
||||
extern glFramebufferTexture1D_func glFramebufferTexture1D;
|
||||
extern glFramebufferTexture2D_func glFramebufferTexture2D;
|
||||
extern glFramebufferTexture3D_func glFramebufferTexture3D;
|
||||
extern glFramebufferRenderbuffer_func glFramebufferRenderbuffer;
|
||||
extern glGetFramebufferAttachmentParameteriv_func glGetFramebufferAttachmentParameteriv;
|
||||
extern glGenerateMipmap_func glGenerateMipmap;
|
||||
|
||||
} // namespace
|
||||
|
||||
|
|
|
@ -90,6 +90,7 @@ bool SceneOpenGL::strict_binding; // intended for AIGLX
|
|||
bool SceneOpenGL::db; // destination drawable is double-buffered
|
||||
bool SceneOpenGL::copy_buffer_hack; // workaround for nvidia < 1.0-9xxx drivers
|
||||
bool SceneOpenGL::supports_npot_textures;
|
||||
bool SceneOpenGL::supports_fbo;
|
||||
bool SceneOpenGL::supports_saturation;
|
||||
bool SceneOpenGL::shm_mode;
|
||||
XShmSegmentInfo SceneOpenGL::shm;
|
||||
|
@ -138,6 +139,7 @@ SceneOpenGL::SceneOpenGL( Workspace* ws )
|
|||
// Check whether certain features are supported
|
||||
supports_npot_textures = hasGLExtension( "GL_ARB_texture_non_power_of_two" )
|
||||
|| hasGLVersion(2, 0);
|
||||
supports_fbo = hasGLExtension( "GL_EXT_framebuffer_object" );
|
||||
supports_saturation = ((hasGLExtension("GL_ARB_texture_env_crossbar")
|
||||
&& hasGLExtension("GL_ARB_texture_env_dot3")) || hasGLVersion(1, 4))
|
||||
&& (glTextureUnitsCount >= 4) && glActiveTexture != NULL;
|
||||
|
|
|
@ -73,6 +73,7 @@ class SceneOpenGL
|
|||
static bool strict_binding;
|
||||
static bool copy_buffer_hack;
|
||||
static bool supports_npot_textures;
|
||||
static bool supports_fbo;
|
||||
static bool supports_saturation;
|
||||
QMap< Toplevel*, Window > windows;
|
||||
static XShmSegmentInfo shm;
|
||||
|
|
Loading…
Reference in a new issue