From 064a0a9804aab8d69382ba30f4dc29a23c96d161 Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Thu, 17 Jan 2019 11:49:24 +1100 Subject: [PATCH] fixed thread syncing --- project/effect.cpp | 1 + project/effect.h | 2 +- ui/renderfunctions.h | 2 ++ ui/renderthread.cpp | 3 ++- ui/viewerwidget.cpp | 5 +---- ui/viewerwindow.cpp | 12 ++++++++++-- ui/viewerwindow.h | 5 ++++- 7 files changed, 21 insertions(+), 9 deletions(-) diff --git a/project/effect.cpp b/project/effect.cpp index e777335c1..fa72412ee 100644 --- a/project/effect.cpp +++ b/project/effect.cpp @@ -922,6 +922,7 @@ GLuint Effect::process_superimpose(double timecode) { } if (valueHasChanged(timecode) || recreate_texture || enable_always_update) { + qDebug() << "redrew"; redraw(timecode); } diff --git a/project/effect.h b/project/effect.h index 413df6d9f..330426b2c 100644 --- a/project/effect.h +++ b/project/effect.h @@ -134,7 +134,7 @@ public: Effect* copy(Clip* c); void copy_field_keyframes(Effect *e); - virtual void load(QXmlStreamReader& stream); + virtual void load(QXmlStreamReader& stream); virtual void custom_load(QXmlStreamReader& stream); virtual void save(QXmlStreamWriter& stream); diff --git a/ui/renderfunctions.h b/ui/renderfunctions.h index a9fe436be..de405bf8c 100644 --- a/ui/renderfunctions.h +++ b/ui/renderfunctions.h @@ -21,4 +21,6 @@ GLuint compose_sequence(Viewer* viewer, void compose_audio(Viewer* viewer, Sequence* seq, bool render_audio); +void viewport_render(); + #endif // RENDERFUNCTIONS_H diff --git a/ui/renderthread.cpp b/ui/renderthread.cpp index 8ac33d1a5..8162d2e71 100644 --- a/ui/renderthread.cpp +++ b/ui/renderthread.cpp @@ -77,7 +77,8 @@ void RenderThread::run() { paint(); // flush changes - glFlush(); +// glFlush(); + glFinish(); // release ctx->functions()->glBindFramebuffer(GL_FRAMEBUFFER, 0); diff --git a/ui/viewerwidget.cpp b/ui/viewerwidget.cpp index 29abe76f9..d7f5d0b59 100644 --- a/ui/viewerwidget.cpp +++ b/ui/viewerwidget.cpp @@ -279,9 +279,6 @@ EffectGizmo* ViewerWidget::get_gizmo_from_mouse(int x, int y) { break; } } - - qDebug() << mouse_pos.x() << gizmos->gizmo(0)->screen_pos[0].x(); - qDebug() << mouse_pos.y() << gizmos->gizmo(0)->screen_pos[0].y(); } return nullptr; } @@ -565,7 +562,7 @@ void ViewerWidget::paintGL() { glDisable(GL_TEXTURE_2D); if (window != nullptr && window->isVisible()) { - window->set_texture(renderer->texColorBuffer, double(viewer->seq->width)/double(viewer->seq->height)); + window->set_texture(renderer->texColorBuffer, double(viewer->seq->width)/double(viewer->seq->height), &renderer->mutex); } renderer->mutex.unlock(); diff --git a/ui/viewerwindow.cpp b/ui/viewerwindow.cpp index e86b0750f..7982c0b1f 100644 --- a/ui/viewerwindow.cpp +++ b/ui/viewerwindow.cpp @@ -1,18 +1,24 @@ #include "viewerwindow.h" +#include + ViewerWindow::ViewerWindow(QOpenGLContext *share) : QOpenGLWindow(share), - texture(0) + texture(0), + mutex(nullptr) {} -void ViewerWindow::set_texture(GLuint t, double iar) { +void ViewerWindow::set_texture(GLuint t, double iar, QMutex* imutex) { texture = t; ar = iar; + mutex = imutex; update(); } void ViewerWindow::paintGL() { if (texture > 0) { + if (mutex != nullptr) mutex->lock(); + glClearColor(0.0, 0.0, 0.0, 1.0); glClear(GL_COLOR_BUFFER_BIT); @@ -56,5 +62,7 @@ void ViewerWindow::paintGL() { glBindTexture(GL_TEXTURE_2D, 0); glDisable(GL_TEXTURE_2D); + + if (mutex != nullptr) mutex->unlock(); } } diff --git a/ui/viewerwindow.h b/ui/viewerwindow.h index 7444222cf..fd4e9e972 100644 --- a/ui/viewerwindow.h +++ b/ui/viewerwindow.h @@ -3,15 +3,18 @@ #include +class QMutex; + class ViewerWindow : public QOpenGLWindow { Q_OBJECT public: ViewerWindow(QOpenGLContext* share); - void set_texture(GLuint t, double iar); + void set_texture(GLuint t, double iar, QMutex *imutex); private: void paintGL(); GLuint texture; double ar; + QMutex* mutex; }; #endif // VIEWERWINDOW_H