From fe72894bb808969ef6c72a4852fa78477e2f77ef Mon Sep 17 00:00:00 2001 From: Marc-André Lureau Date: Mon, 23 Sep 2013 22:47:06 +0200 Subject: spicec: fix non-doublebuffer drawing First, context must set it, then Draw/ReadBuffer must be set to FRONT, and then explicit Flush is needed. This patch is mostly for future reference, it is mostly discarded in following patch using double-buffer. --- client/x11/platform.cpp | 1 + client/x11/red_drawable.cpp | 1 + client/x11/red_pixmap_gl.cpp | 2 ++ 3 files changed, 4 insertions(+) (limited to 'client') diff --git a/client/x11/platform.cpp b/client/x11/platform.cpp index 14c6e0cd..da6b6342 100644 --- a/client/x11/platform.cpp +++ b/client/x11/platform.cpp @@ -3224,6 +3224,7 @@ void Platform::init() int num_configs; int attrlist[] = { GLX_RENDER_TYPE, GLX_RGBA_BIT, + GLX_DOUBLEBUFFER, False, GLX_DRAWABLE_TYPE, GLX_PBUFFER_BIT | GLX_WINDOW_BIT, GLX_X_VISUAL_TYPE, GLX_TRUE_COLOR, GLX_RED_SIZE, 8, diff --git a/client/x11/red_drawable.cpp b/client/x11/red_drawable.cpp index 54e53f8d..19532c74 100644 --- a/client/x11/red_drawable.cpp +++ b/client/x11/red_drawable.cpp @@ -85,6 +85,7 @@ static inline void copy_to_gldrawable_from_gltexture(const RedDrawable_p* dest, if (rendertype == RENDER_TYPE_FBO) { GLuint fbo; + glFlush(); fbo = source->gl.fbo; glBindFramebuffer(GL_FRAMEBUFFER_EXT, fbo); } else { diff --git a/client/x11/red_pixmap_gl.cpp b/client/x11/red_pixmap_gl.cpp index 1a586286..693b67d1 100644 --- a/client/x11/red_pixmap_gl.cpp +++ b/client/x11/red_pixmap_gl.cpp @@ -79,6 +79,8 @@ RedPixmapGL::RedPixmapGL(int width, int height, RedDrawable::Format format, glXDestroyContext(XPlatform::get_display(), _glcont); THROW("no GL_EXT_framebuffer_object extension"); } + glDrawBuffer(GL_FRONT); + glReadBuffer(GL_FRONT); glGenTextures(1, &tex); glBindTexture(GL_TEXTURE_2D, tex); -- cgit