summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorChristian Kamm <christian.d.kamm@nokia.com>2010-08-06 10:35:47 (GMT)
committerChristian Kamm <christian.d.kamm@nokia.com>2010-08-06 10:35:47 (GMT)
commita8530e5db7ae25ea0ab5df4681308374abf8b6ba (patch)
treef78ee517e8f160aeaed1915854b3ff7c41612ee5 /src
parenta1f0a650578b71fddae9db05435715338b15ba35 (diff)
downloadQt-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.cpp12
-rw-r--r--src/gui/kernel/qplatformglcontext_qpa.h1
-rw-r--r--src/opengl/qgl_qpa.cpp1
-rw-r--r--src/opengl/qglpaintdevice.cpp6
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))