diff options
Diffstat (limited to 'examples/opengl/hellowindow/hellowindow.cpp')
-rw-r--r-- | examples/opengl/hellowindow/hellowindow.cpp | 34 |
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)) |