Try to use direct rendering.
svn path=/branches/work/kwin_composite/; revision=605288
This commit is contained in:
parent
9d25cf5166
commit
a35cf8e954
2 changed files with 27 additions and 5 deletions
|
@ -188,11 +188,7 @@ SceneOpenGL::SceneOpenGL( Workspace* ws )
|
||||||
glXGetFBConfigAttrib( display(), fbcdrawable, GLX_VISUAL_ID, &vis_drawable );
|
glXGetFBConfigAttrib( display(), fbcdrawable, GLX_VISUAL_ID, &vis_drawable );
|
||||||
kDebug() << "Buffer visual: 0x" << QString::number( vis_buffer, 16 ) << ", drawable visual: 0x"
|
kDebug() << "Buffer visual: 0x" << QString::number( vis_buffer, 16 ) << ", drawable visual: 0x"
|
||||||
<< QString::number( vis_drawable, 16 ) << endl;
|
<< QString::number( vis_drawable, 16 ) << endl;
|
||||||
ctxbuffer = glXCreateNewContext( display(), fbcbuffer, GLX_RGBA_TYPE, NULL, GL_FALSE );
|
initRenderingContext();
|
||||||
if( !tfp_mode && !shm_mode )
|
|
||||||
ctxdrawable = glXCreateNewContext( display(), fbcdrawable, GLX_RGBA_TYPE, ctxbuffer, GL_FALSE );
|
|
||||||
if( !glXMakeContextCurrent( display(), glxbuffer, glxbuffer, ctxbuffer ) )
|
|
||||||
assert( false );
|
|
||||||
|
|
||||||
// Initialize OpenGL
|
// Initialize OpenGL
|
||||||
initGL();
|
initGL();
|
||||||
|
@ -293,6 +289,31 @@ void SceneOpenGL::cleanupShm()
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SceneOpenGL::initRenderingContext()
|
||||||
|
{
|
||||||
|
bool direct_rendering = true;
|
||||||
|
KXErrorHandler errs;
|
||||||
|
ctxbuffer = glXCreateNewContext( display(), fbcbuffer, GLX_RGBA_TYPE, NULL,
|
||||||
|
direct_rendering ? GL_TRUE : GL_FALSE );
|
||||||
|
if( ctxbuffer == NULL || !glXMakeContextCurrent( display(), glxbuffer, glxbuffer, ctxbuffer )
|
||||||
|
|| errs.error( true ))
|
||||||
|
{ // failed
|
||||||
|
if( !direct_rendering )
|
||||||
|
assert( false );
|
||||||
|
glXDestroyContext( display(), ctxbuffer );
|
||||||
|
direct_rendering = false; // try again
|
||||||
|
ctxbuffer = glXCreateNewContext( display(), fbcbuffer, GLX_RGBA_TYPE, NULL, GL_FALSE );
|
||||||
|
if( ctxbuffer == NULL || !glXMakeContextCurrent( display(), glxbuffer, glxbuffer, ctxbuffer ))
|
||||||
|
assert( false );
|
||||||
|
}
|
||||||
|
if( !tfp_mode && !shm_mode )
|
||||||
|
{
|
||||||
|
ctxdrawable = glXCreateNewContext( display(), fbcdrawable, GLX_RGBA_TYPE, ctxbuffer,
|
||||||
|
direct_rendering ? GL_TRUE : GL_FALSE );
|
||||||
|
}
|
||||||
|
kDebug() << "Direct rendering:" << direct_rendering << endl;
|
||||||
|
}
|
||||||
|
|
||||||
// create destination buffer
|
// create destination buffer
|
||||||
void SceneOpenGL::initBuffer()
|
void SceneOpenGL::initBuffer()
|
||||||
{
|
{
|
||||||
|
|
|
@ -41,6 +41,7 @@ class SceneOpenGL
|
||||||
bool initShm();
|
bool initShm();
|
||||||
void cleanupShm();
|
void cleanupShm();
|
||||||
void initBuffer();
|
void initBuffer();
|
||||||
|
void initRenderingContext();
|
||||||
bool findConfig( const int* attrs, GLXFBConfig* config, VisualID visual = None );
|
bool findConfig( const int* attrs, GLXFBConfig* config, VisualID visual = None );
|
||||||
typedef GLuint Texture;
|
typedef GLuint Texture;
|
||||||
GC gcroot;
|
GC gcroot;
|
||||||
|
|
Loading…
Reference in a new issue