summaryrefslogtreecommitdiffstats
path: root/src/opengl/qwindowsurface_gl.cpp
diff options
context:
space:
mode:
authorSamuel Rødal <sroedal@trolltech.com>2009-03-09 12:07:18 (GMT)
committerGunnar Sletta <gunnar@trolltech.com>2009-04-01 14:32:53 (GMT)
commit6ab74831766cdd5cf4e94eee8a60099436e61202 (patch)
tree137b83f6605a50a200cc266810230e49a057f4c1 /src/opengl/qwindowsurface_gl.cpp
parent7cee2659388388754d741ba4b46647c57d03c498 (diff)
downloadQt-6ab74831766cdd5cf4e94eee8a60099436e61202.zip
Qt-6ab74831766cdd5cf4e94eee8a60099436e61202.tar.gz
Qt-6ab74831766cdd5cf4e94eee8a60099436e61202.tar.bz2
Fixes: Extreme amount of pixel buffers created in embeddeddialogs demo.
Details: As a window surface is created even for embedded widgets, don't create the GL resources required by the surface until they are actually needed. RevBy: Tom
Diffstat (limited to 'src/opengl/qwindowsurface_gl.cpp')
-rw-r--r--src/opengl/qwindowsurface_gl.cpp14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/opengl/qwindowsurface_gl.cpp b/src/opengl/qwindowsurface_gl.cpp
index bb4ffc5..08c2aab 100644
--- a/src/opengl/qwindowsurface_gl.cpp
+++ b/src/opengl/qwindowsurface_gl.cpp
@@ -315,6 +315,8 @@ QGLContext *QGLWindowSurface::context() const
QPaintDevice *QGLWindowSurface::paintDevice()
{
+ updateGeometry();
+
if (d_ptr->pb)
return d_ptr->pb;
@@ -330,6 +332,7 @@ static void drawTexture(const QRectF &rect, GLuint tex_id, const QSize &texSize,
void QGLWindowSurface::beginPaint(const QRegion &)
{
+ updateGeometry();
}
void QGLWindowSurface::endPaint(const QRegion &rgn)
@@ -460,9 +463,9 @@ void QGLWindowSurface::flush(QWidget *widget, const QRegion &rgn, const QPoint &
d_ptr->fbo->bind();
}
-void QGLWindowSurface::setGeometry(const QRect &rect)
+void QGLWindowSurface::updateGeometry()
{
- QWindowSurface::setGeometry(rect);
+ QRect rect = QWindowSurface::geometry();
const GLenum target = qt_gl_preferredTextureTarget();
@@ -496,7 +499,7 @@ void QGLWindowSurface::setGeometry(const QRect &rect)
qt_gl_share_widget());
if (d_ptr->pb->isValid()) {
- qDebug() << "PB Sample buffers:" << d_ptr->pb->format().sampleBuffers();
+ qDebug() << "Created Window Surface Pixelbuffer, Sample buffers:" << d_ptr->pb->format().sampleBuffers();
d_ptr->pb->makeCurrent();
glGenTextures(1, &d_ptr->pb_tex_id);
@@ -561,6 +564,11 @@ void QGLWindowSurface::setGeometry(const QRect &rect)
d_ptr->ctx->d_ptr->internal_context = true;
}
+void QGLWindowSurface::setGeometry(const QRect &rect)
+{
+ QWindowSurface::setGeometry(rect);
+}
+
bool QGLWindowSurface::scroll(const QRegion &area, int dx, int dy)
{
// this code randomly fails currently for unknown reasons