diff options
author | Christian Kamm <christian.d.kamm@nokia.com> | 2010-08-06 10:35:47 (GMT) |
---|---|---|
committer | Christian Kamm <christian.d.kamm@nokia.com> | 2010-08-06 10:35:47 (GMT) |
commit | a8530e5db7ae25ea0ab5df4681308374abf8b6ba (patch) | |
tree | f78ee517e8f160aeaed1915854b3ff7c41612ee5 /src | |
parent | a1f0a650578b71fddae9db05435715338b15ba35 (diff) | |
download | Qt-a8530e5db7ae25ea0ab5df4681308374abf8b6ba.zip Qt-a8530e5db7ae25ea0ab5df4681308374abf8b6ba.tar.gz Qt-a8530e5db7ae25ea0ab5df4681308374abf8b6ba.tar.bz2 |
Allow customizing the default fbo from the QPlatformGLContext.
Reviewed-by: Jørgen Lind
Diffstat (limited to 'src')
-rw-r--r-- | src/gui/kernel/qplatformglcontext_qpa.cpp | 12 | ||||
-rw-r--r-- | src/gui/kernel/qplatformglcontext_qpa.h | 1 | ||||
-rw-r--r-- | src/opengl/qgl_qpa.cpp | 1 | ||||
-rw-r--r-- | src/opengl/qglpaintdevice.cpp | 6 |
4 files changed, 20 insertions, 0 deletions
diff --git a/src/gui/kernel/qplatformglcontext_qpa.cpp b/src/gui/kernel/qplatformglcontext_qpa.cpp index 36db2b0..4fcd9b8 100644 --- a/src/gui/kernel/qplatformglcontext_qpa.cpp +++ b/src/gui/kernel/qplatformglcontext_qpa.cpp @@ -44,6 +44,18 @@ QPlatformGLContext::~QPlatformGLContext() { } +/*! + The frame buffer object that a QGLWidget is painted to and that gets bound + when a QGLFramebufferObject is released. + + The default implementation returns 0, which denotes the default + window-system provided frame buffer. +*/ +GLuint QPlatformGLContext::defaultFBO() const +{ + return 0; +} + static QPlatformGLContext *staticSharedContext = 0; void QPlatformGLContext::setDefaultSharedContext(QPlatformGLContext *sharedContext) diff --git a/src/gui/kernel/qplatformglcontext_qpa.h b/src/gui/kernel/qplatformglcontext_qpa.h index d235848..9bfe676 100644 --- a/src/gui/kernel/qplatformglcontext_qpa.h +++ b/src/gui/kernel/qplatformglcontext_qpa.h @@ -57,6 +57,7 @@ public: virtual void doneCurrent() = 0; virtual void swapBuffers() = 0; virtual void* getProcAddress(const QString& procName) = 0; + virtual GLuint defaultFBO() const; virtual QPlatformWindowFormat platformWindowFormat() const = 0; diff --git a/src/opengl/qgl_qpa.cpp b/src/opengl/qgl_qpa.cpp index 5f0bca3..b05df64 100644 --- a/src/opengl/qgl_qpa.cpp +++ b/src/opengl/qgl_qpa.cpp @@ -139,6 +139,7 @@ bool QGLContext::chooseContext(const QGLContext* shareContext) } d->platformContext = widget->platformWindow()->glContext(); Q_ASSERT(d->platformContext); + d->default_fbo = d->platformContext->defaultFBO(); d->glFormat = qt_platformwindowformat_to_glformat(d->platformContext->platformWindowFormat()); d->valid =(bool) d->platformContext; } diff --git a/src/opengl/qglpaintdevice.cpp b/src/opengl/qglpaintdevice.cpp index e1dcbfd..e12fdae 100644 --- a/src/opengl/qglpaintdevice.cpp +++ b/src/opengl/qglpaintdevice.cpp @@ -166,6 +166,12 @@ void QGLWidgetGLPaintDevice::setWidget(QGLWidget* w) void QGLWidgetGLPaintDevice::beginPaint() { + // ### This should be in setWidget(), but the context of the QGLWidget + // hasn't been set there yet. +#ifdef Q_WS_QPA + m_thisFBO = context()->d_ptr->platformContext->defaultFBO(); +#endif + QGLPaintDevice::beginPaint(); if (!glWidget->d_func()->disable_clear_on_painter_begin && glWidget->autoFillBackground()) { if (glWidget->testAttribute(Qt::WA_TranslucentBackground)) |