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
|
// texture_from_pixmap extension functions
|
||||||
glXReleaseTexImageEXT_func glXReleaseTexImageEXT;
|
glXReleaseTexImageEXT_func glXReleaseTexImageEXT;
|
||||||
glXBindTexImageEXT_func glXBindTexImageEXT;
|
glXBindTexImageEXT_func glXBindTexImageEXT;
|
||||||
// glActiveTexture
|
|
||||||
glActiveTexture_func glActiveTexture;
|
|
||||||
// glXCopySubBufferMESA
|
// glXCopySubBufferMESA
|
||||||
glXCopySubBuffer_func glXCopySubBuffer;
|
glXCopySubBuffer_func glXCopySubBuffer;
|
||||||
// video_sync extension functions
|
// video_sync extension functions
|
||||||
glXGetVideoSync_func glXGetVideoSync;
|
glXGetVideoSync_func glXGetVideoSync;
|
||||||
glXWaitVideoSync_func glXWaitVideoSync;
|
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
|
// Functions
|
||||||
|
@ -119,6 +137,54 @@ void initGL()
|
||||||
glActiveTexture = NULL;
|
glActiveTexture = NULL;
|
||||||
glTextureUnitsCount = 0;
|
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)
|
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 );
|
typedef void (*glXReleaseTexImageEXT_func)( Display* dpy, GLXDrawable drawable, int buffer );
|
||||||
extern glXReleaseTexImageEXT_func glXReleaseTexImageEXT;
|
extern glXReleaseTexImageEXT_func glXReleaseTexImageEXT;
|
||||||
extern glXBindTexImageEXT_func glXBindTexImageEXT;
|
extern glXBindTexImageEXT_func glXBindTexImageEXT;
|
||||||
// glActiveTexture
|
|
||||||
typedef void (*glActiveTexture_func)(GLenum);
|
|
||||||
extern glActiveTexture_func glActiveTexture;
|
|
||||||
// glXCopySubBufferMESA
|
// glXCopySubBufferMESA
|
||||||
typedef void (*glXCopySubBuffer_func) ( Display* , GLXDrawable, int, int, int, int );
|
typedef void (*glXCopySubBuffer_func) ( Display* , GLXDrawable, int, int, int, int );
|
||||||
extern glXCopySubBuffer_func glXCopySubBuffer;
|
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 );
|
typedef void (*glXWaitVideoSync_func)( int divisor, int remainder, unsigned int *count );
|
||||||
extern glXGetVideoSync_func glXGetVideoSync;
|
extern glXGetVideoSync_func glXGetVideoSync;
|
||||||
extern glXWaitVideoSync_func glXWaitVideoSync;
|
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
|
} // namespace
|
||||||
|
|
||||||
|
|
|
@ -90,6 +90,7 @@ bool SceneOpenGL::strict_binding; // intended for AIGLX
|
||||||
bool SceneOpenGL::db; // destination drawable is double-buffered
|
bool SceneOpenGL::db; // destination drawable is double-buffered
|
||||||
bool SceneOpenGL::copy_buffer_hack; // workaround for nvidia < 1.0-9xxx drivers
|
bool SceneOpenGL::copy_buffer_hack; // workaround for nvidia < 1.0-9xxx drivers
|
||||||
bool SceneOpenGL::supports_npot_textures;
|
bool SceneOpenGL::supports_npot_textures;
|
||||||
|
bool SceneOpenGL::supports_fbo;
|
||||||
bool SceneOpenGL::supports_saturation;
|
bool SceneOpenGL::supports_saturation;
|
||||||
bool SceneOpenGL::shm_mode;
|
bool SceneOpenGL::shm_mode;
|
||||||
XShmSegmentInfo SceneOpenGL::shm;
|
XShmSegmentInfo SceneOpenGL::shm;
|
||||||
|
@ -138,6 +139,7 @@ SceneOpenGL::SceneOpenGL( Workspace* ws )
|
||||||
// Check whether certain features are supported
|
// Check whether certain features are supported
|
||||||
supports_npot_textures = hasGLExtension( "GL_ARB_texture_non_power_of_two" )
|
supports_npot_textures = hasGLExtension( "GL_ARB_texture_non_power_of_two" )
|
||||||
|| hasGLVersion(2, 0);
|
|| hasGLVersion(2, 0);
|
||||||
|
supports_fbo = hasGLExtension( "GL_EXT_framebuffer_object" );
|
||||||
supports_saturation = ((hasGLExtension("GL_ARB_texture_env_crossbar")
|
supports_saturation = ((hasGLExtension("GL_ARB_texture_env_crossbar")
|
||||||
&& hasGLExtension("GL_ARB_texture_env_dot3")) || hasGLVersion(1, 4))
|
&& hasGLExtension("GL_ARB_texture_env_dot3")) || hasGLVersion(1, 4))
|
||||||
&& (glTextureUnitsCount >= 4) && glActiveTexture != NULL;
|
&& (glTextureUnitsCount >= 4) && glActiveTexture != NULL;
|
||||||
|
|
|
@ -73,6 +73,7 @@ class SceneOpenGL
|
||||||
static bool strict_binding;
|
static bool strict_binding;
|
||||||
static bool copy_buffer_hack;
|
static bool copy_buffer_hack;
|
||||||
static bool supports_npot_textures;
|
static bool supports_npot_textures;
|
||||||
|
static bool supports_fbo;
|
||||||
static bool supports_saturation;
|
static bool supports_saturation;
|
||||||
QMap< Toplevel*, Window > windows;
|
QMap< Toplevel*, Window > windows;
|
||||||
static XShmSegmentInfo shm;
|
static XShmSegmentInfo shm;
|
||||||
|
|
Loading…
Reference in a new issue