From a20c52dffcef05f9ee44ed4cf3a729a19b1c2ab9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Mon, 14 Jan 2019 14:21:10 +0100 Subject: Use requestUpdate instead of timer in a few GL examples Change-Id: I235ad367fe693c86ef5a0844fde0573371b284db Reviewed-by: Laszlo Agocs --- examples/opengl/contextinfo/renderwindow.cpp | 13 ++++++++----- examples/opengl/contextinfo/renderwindow.h | 3 +++ examples/opengl/hellowindow/hellowindow.cpp | 13 ++++++++++--- examples/opengl/hellowindow/hellowindow.h | 5 +++-- 4 files changed, 24 insertions(+), 10 deletions(-) (limited to 'examples/opengl') diff --git a/examples/opengl/contextinfo/renderwindow.cpp b/examples/opengl/contextinfo/renderwindow.cpp index 2ac2a38afb..21b7434be6 100644 --- a/examples/opengl/contextinfo/renderwindow.cpp +++ b/examples/opengl/contextinfo/renderwindow.cpp @@ -181,6 +181,13 @@ void RenderWindow::setupVertexAttribs() m_vbo.release(); } +bool RenderWindow::event(QEvent *ev) +{ + if (ev->type() == QEvent::UpdateRequest) + render(); + return QWindow::event(ev); +} + void RenderWindow::render() { if (!m_context->makeCurrent(this)) { @@ -227,9 +234,5 @@ void RenderWindow::render() m_angle += 1.0f; - // Instead of 0 wait a few more milliseconds before rendering again. This is - // only here to make the UI widgets more responsive on slower machines. We - // can afford it since our rendering is so lightweight. - const int interval = 5; - QTimer::singleShot(interval, this, &RenderWindow::render); + requestUpdate(); } diff --git a/examples/opengl/contextinfo/renderwindow.h b/examples/opengl/contextinfo/renderwindow.h index c148b71c3c..1b4a79dfcf 100644 --- a/examples/opengl/contextinfo/renderwindow.h +++ b/examples/opengl/contextinfo/renderwindow.h @@ -72,6 +72,9 @@ signals: void ready(); void error(const QString &msg); +protected: + bool event(QEvent *ev) override; + private slots: void render(); diff --git a/examples/opengl/hellowindow/hellowindow.cpp b/examples/opengl/hellowindow/hellowindow.cpp index a978e19b79..1c1259de13 100644 --- a/examples/opengl/hellowindow/hellowindow.cpp +++ b/examples/opengl/hellowindow/hellowindow.cpp @@ -98,6 +98,15 @@ void HelloWindow::exposeEvent(QExposeEvent *) m_renderer->render(); } +bool HelloWindow::event(QEvent *ev) +{ + if (ev->type() == QEvent::UpdateRequest) { + m_renderer->render(); + requestUpdate(); + } + return QWindow::event(ev); +} + void HelloWindow::mousePressEvent(QMouseEvent *) { updateColor(); @@ -132,7 +141,7 @@ void Renderer::setAnimating(HelloWindow *window, bool animating) if (animating) { m_windows << window; if (m_windows.size() == 1) - QTimer::singleShot(0, this, &Renderer::render); + window->requestUpdate(); } else { m_currentWindow = 0; m_windows.removeOne(window); @@ -196,8 +205,6 @@ void Renderer::render() m_context->swapBuffers(surface); m_fAngle += 1.0f; - - QTimer::singleShot(0, this, &Renderer::render); } Q_GLOBAL_STATIC(QMutex, initMutex) diff --git a/examples/opengl/hellowindow/hellowindow.h b/examples/opengl/hellowindow/hellowindow.h index e92e45a125..e6d7970cfc 100644 --- a/examples/opengl/hellowindow/hellowindow.h +++ b/examples/opengl/hellowindow/hellowindow.h @@ -112,11 +112,12 @@ public: QColor color() const; void updateColor(); +protected: + bool event(QEvent *ev) override; void exposeEvent(QExposeEvent *event) override; - -private: void mousePressEvent(QMouseEvent *) override; +private: int m_colorIndex; QColor m_color; const QSharedPointer m_renderer; -- cgit v1.2.3