Use requestUpdate instead of timer in a few GL examples
Change-Id: I235ad367fe693c86ef5a0844fde0573371b284db Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
This commit is contained in:
parent
e823c351c6
commit
a20c52dffc
@ -181,6 +181,13 @@ void RenderWindow::setupVertexAttribs()
|
|||||||
m_vbo.release();
|
m_vbo.release();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool RenderWindow::event(QEvent *ev)
|
||||||
|
{
|
||||||
|
if (ev->type() == QEvent::UpdateRequest)
|
||||||
|
render();
|
||||||
|
return QWindow::event(ev);
|
||||||
|
}
|
||||||
|
|
||||||
void RenderWindow::render()
|
void RenderWindow::render()
|
||||||
{
|
{
|
||||||
if (!m_context->makeCurrent(this)) {
|
if (!m_context->makeCurrent(this)) {
|
||||||
@ -227,9 +234,5 @@ void RenderWindow::render()
|
|||||||
|
|
||||||
m_angle += 1.0f;
|
m_angle += 1.0f;
|
||||||
|
|
||||||
// Instead of 0 wait a few more milliseconds before rendering again. This is
|
requestUpdate();
|
||||||
// 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);
|
|
||||||
}
|
}
|
||||||
|
@ -72,6 +72,9 @@ signals:
|
|||||||
void ready();
|
void ready();
|
||||||
void error(const QString &msg);
|
void error(const QString &msg);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
bool event(QEvent *ev) override;
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void render();
|
void render();
|
||||||
|
|
||||||
|
@ -98,6 +98,15 @@ void HelloWindow::exposeEvent(QExposeEvent *)
|
|||||||
m_renderer->render();
|
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 *)
|
void HelloWindow::mousePressEvent(QMouseEvent *)
|
||||||
{
|
{
|
||||||
updateColor();
|
updateColor();
|
||||||
@ -132,7 +141,7 @@ void Renderer::setAnimating(HelloWindow *window, bool animating)
|
|||||||
if (animating) {
|
if (animating) {
|
||||||
m_windows << window;
|
m_windows << window;
|
||||||
if (m_windows.size() == 1)
|
if (m_windows.size() == 1)
|
||||||
QTimer::singleShot(0, this, &Renderer::render);
|
window->requestUpdate();
|
||||||
} else {
|
} else {
|
||||||
m_currentWindow = 0;
|
m_currentWindow = 0;
|
||||||
m_windows.removeOne(window);
|
m_windows.removeOne(window);
|
||||||
@ -196,8 +205,6 @@ void Renderer::render()
|
|||||||
m_context->swapBuffers(surface);
|
m_context->swapBuffers(surface);
|
||||||
|
|
||||||
m_fAngle += 1.0f;
|
m_fAngle += 1.0f;
|
||||||
|
|
||||||
QTimer::singleShot(0, this, &Renderer::render);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Q_GLOBAL_STATIC(QMutex, initMutex)
|
Q_GLOBAL_STATIC(QMutex, initMutex)
|
||||||
|
@ -112,11 +112,12 @@ public:
|
|||||||
QColor color() const;
|
QColor color() const;
|
||||||
void updateColor();
|
void updateColor();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
bool event(QEvent *ev) override;
|
||||||
void exposeEvent(QExposeEvent *event) override;
|
void exposeEvent(QExposeEvent *event) override;
|
||||||
|
|
||||||
private:
|
|
||||||
void mousePressEvent(QMouseEvent *) override;
|
void mousePressEvent(QMouseEvent *) override;
|
||||||
|
|
||||||
|
private:
|
||||||
int m_colorIndex;
|
int m_colorIndex;
|
||||||
QColor m_color;
|
QColor m_color;
|
||||||
const QSharedPointer<Renderer> m_renderer;
|
const QSharedPointer<Renderer> m_renderer;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user