summaryrefslogtreecommitdiffstats
path: root/examples/opengl/hellowindow/hellowindow.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'examples/opengl/hellowindow/hellowindow.cpp')
-rw-r--r--examples/opengl/hellowindow/hellowindow.cpp34
1 files changed, 16 insertions, 18 deletions
diff --git a/examples/opengl/hellowindow/hellowindow.cpp b/examples/opengl/hellowindow/hellowindow.cpp
index 5a232e6a7b..3c4f88bdfe 100644
--- a/examples/opengl/hellowindow/hellowindow.cpp
+++ b/examples/opengl/hellowindow/hellowindow.cpp
@@ -6,39 +6,37 @@
#include <qmath.h>
-Renderer::Renderer()
+Renderer::Renderer(const QSurfaceFormat &format, Renderer *share)
: m_initialized(false)
+ , m_format(format)
{
- m_format.setDepthBufferSize(16);
- m_format.setSamples(4);
-
m_context = new QGuiGLContext;
- m_context->setFormat(m_format);
+ m_context->setFormat(format);
+ if (share)
+ m_context->setShareContext(share->m_context);
m_context->create();
}
-QSurfaceFormat Renderer::format() const
-{
- return m_format;
-}
-
HelloWindow::HelloWindow(Renderer *renderer)
: m_colorIndex(0)
, m_renderer(renderer)
{
setSurfaceType(QWindow::OpenGLSurface);
- setWindowTitle(QLatin1String("Hello Window"));
-
- setFormat(renderer->format());
+ setWindowFlags(Qt::Window | Qt::WindowTitleHint | Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint);
setGeometry(QRect(10, 10, 640, 480));
+ setFormat(renderer->format());
+
create();
QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(render()));
timer->start(10);
+ connect(this, SIGNAL(needRender(QSurface *, const QColor &, const QSize &)),
+ renderer, SLOT(render(QSurface *, const QColor &, const QSize &)));
+
updateColor();
}
@@ -47,6 +45,11 @@ void HelloWindow::mousePressEvent(QMouseEvent *)
updateColor();
}
+void HelloWindow::render()
+{
+ emit needRender(this, m_color, size());
+}
+
void HelloWindow::updateColor()
{
QColor colors[] =
@@ -62,11 +65,6 @@ void HelloWindow::updateColor()
m_colorIndex = 0;
}
-void HelloWindow::render()
-{
- m_renderer->render(this, m_color, geometry().size());
-}
-
void Renderer::render(QSurface *surface, const QColor &color, const QSize &viewSize)
{
if (!m_context->makeCurrent(surface))