aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--examples/quick/rendercontrol/cuberenderer.cpp10
-rw-r--r--examples/quick/rendercontrol/cuberenderer.h4
-rw-r--r--examples/quick/rendercontrol/window_multithreaded.cpp6
-rw-r--r--examples/quick/rendercontrol/window_singlethreaded.cpp6
4 files changed, 15 insertions, 11 deletions
diff --git a/examples/quick/rendercontrol/cuberenderer.cpp b/examples/quick/rendercontrol/cuberenderer.cpp
index c385d46533..02d925b148 100644
--- a/examples/quick/rendercontrol/cuberenderer.cpp
+++ b/examples/quick/rendercontrol/cuberenderer.cpp
@@ -48,8 +48,9 @@
#include <QOffscreenSurface>
#include <QWindow>
-CubeRenderer::CubeRenderer()
- : m_context(0),
+CubeRenderer::CubeRenderer(QOffscreenSurface *offscreenSurface)
+ : m_offscreenSurface(offscreenSurface),
+ m_context(0),
m_program(0),
m_vbo(0)
{
@@ -59,10 +60,7 @@ CubeRenderer::~CubeRenderer()
{
// Use a temporary offscreen surface to do the cleanup.
// There may not be a native window surface available anymore at this stage.
- QScopedPointer<QOffscreenSurface> offscreenSurface(new QOffscreenSurface);
- offscreenSurface->setFormat(m_context->format());
- offscreenSurface->create();
- m_context->makeCurrent(offscreenSurface.data());
+ m_context->makeCurrent(m_offscreenSurface);
delete m_program;
delete m_vbo;
diff --git a/examples/quick/rendercontrol/cuberenderer.h b/examples/quick/rendercontrol/cuberenderer.h
index 8f98376fdf..1d5400ade2 100644
--- a/examples/quick/rendercontrol/cuberenderer.h
+++ b/examples/quick/rendercontrol/cuberenderer.h
@@ -48,11 +48,12 @@ QT_FORWARD_DECLARE_CLASS(QOpenGLShaderProgram)
QT_FORWARD_DECLARE_CLASS(QOpenGLBuffer)
QT_FORWARD_DECLARE_CLASS(QOpenGLVertexArrayObject)
QT_FORWARD_DECLARE_CLASS(QWindow)
+QT_FORWARD_DECLARE_CLASS(QOffscreenSurface)
class CubeRenderer
{
public:
- CubeRenderer();
+ CubeRenderer(QOffscreenSurface *offscreenSurface);
~CubeRenderer();
void resize(int w, int h);
@@ -62,6 +63,7 @@ private:
void init(QWindow *w, QOpenGLContext *share);
void setupVertexAttribs();
+ QOffscreenSurface *m_offscreenSurface;
QOpenGLContext *m_context;
QOpenGLShaderProgram *m_program;
QOpenGLBuffer *m_vbo;
diff --git a/examples/quick/rendercontrol/window_multithreaded.cpp b/examples/quick/rendercontrol/window_multithreaded.cpp
index ad261848bf..2248105e9b 100644
--- a/examples/quick/rendercontrol/window_multithreaded.cpp
+++ b/examples/quick/rendercontrol/window_multithreaded.cpp
@@ -130,7 +130,11 @@ void QuickRenderer::init()
{
m_context->makeCurrent(m_surface);
- m_cubeRenderer = new CubeRenderer;
+ // Pass our offscreen surface to the cube renderer just so that it will
+ // have something is can make current during cleanup. QOffscreenSurface,
+ // just like QWindow, must always be created on the gui thread (as it might
+ // be backed by an actual QWindow).
+ m_cubeRenderer = new CubeRenderer(m_surface);
m_cubeRenderer->resize(m_window->width(), m_window->height());
m_renderControl->initialize(m_context);
diff --git a/examples/quick/rendercontrol/window_singlethreaded.cpp b/examples/quick/rendercontrol/window_singlethreaded.cpp
index 454b06f425..8ed3f5555c 100644
--- a/examples/quick/rendercontrol/window_singlethreaded.cpp
+++ b/examples/quick/rendercontrol/window_singlethreaded.cpp
@@ -81,7 +81,7 @@ WindowSingleThreaded::WindowSingleThreaded()
m_offscreenSurface->setFormat(m_context->format());
m_offscreenSurface->create();
- m_cubeRenderer = new CubeRenderer;
+ m_cubeRenderer = new CubeRenderer(m_offscreenSurface);
m_renderControl = new QQuickRenderControl(this);
@@ -129,10 +129,10 @@ WindowSingleThreaded::~WindowSingleThreaded()
m_context->doneCurrent();
+ delete m_cubeRenderer;
+
delete m_offscreenSurface;
delete m_context;
-
- delete m_cubeRenderer;
}
void WindowSingleThreaded::createFbo()