threaded improvements

This commit is contained in:
itsmattkc
2019-01-15 18:59:55 +11:00
parent 658a6d379e
commit 13d30ab06a
5 changed files with 34 additions and 16 deletions
-1
View File
@@ -122,7 +122,6 @@ GLuint compose_sequence(Viewer* viewer,
}
bool drawn_gizmos = false;
if (video && nests.isEmpty()) texture_failed = false;
Sequence* s = seq;
long playhead = s->playhead;
+6 -3
View File
@@ -6,6 +6,7 @@
#include <QDebug>
#include "ui/renderfunctions.h"
#include "playback/playback.h"
RenderThread::RenderThread() :
share_ctx(nullptr),
@@ -83,11 +84,13 @@ void RenderThread::run() {
}
void RenderThread::paint() {
glLoadIdentity();
texture_failed = false;
glClearColor(0, 0, 0, 1);
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
glClearColor(0, 0, 0, 0);
glMatrixMode(GL_MODELVIEW);
glEnable(GL_TEXTURE_2D);
@@ -104,7 +107,7 @@ void RenderThread::paint() {
glDisable(GL_TEXTURE_2D);
}
void RenderThread::start_render(QOpenGLContext *share, Sequence *s) {
void RenderThread::start_render(QOpenGLContext *share, Sequence *s, int idivider) {
share_ctx = share;
seq = s;
waitCond.wakeAll();
+2 -1
View File
@@ -19,13 +19,14 @@ public:
GLuint frameBuffer;
GLuint texColorBuffer;
void paint();
void start_render(QOpenGLContext* share, Sequence* s);
void start_render(QOpenGLContext* share, Sequence* s, int idivider = 0);
private:
QWaitCondition waitCond;
QOffscreenSurface surface;
QOpenGLContext* share_ctx;
QOpenGLContext* ctx;
Sequence* seq;
int divider;
};
#endif // RENDERTHREAD_H
+25 -11
View File
@@ -52,7 +52,8 @@ ViewerWidget::ViewerWidget(QWidget *parent) :
waveform_scroll(0),
dragging(false),
gizmos(nullptr),
selected_gizmo(nullptr)
selected_gizmo(nullptr),
just_repaint(false)
{
setMouseTracking(true);
setFocusPolicy(Qt::ClickFocus);
@@ -392,25 +393,27 @@ void ViewerWidget::drawTitleSafeArea() {
}
void ViewerWidget::paintGL() {
retry_timer.stop();
if (viewer->seq != nullptr) {
gizmos = nullptr;
drawn_gizmos = false;
force_quit = false;
bool render_audio = (viewer->playing || rendering);
if (!just_repaint) {
bool render_audio = (viewer->playing || rendering);
retry_timer.stop();
// send context to other thread for drawing
doneCurrent();
renderer->start_render(context(), viewer->seq);
// send context to other thread for drawing
doneCurrent();
renderer->start_render(context(), viewer->seq);
// render the audio
QVector<Clip*> nests;
compose_sequence(viewer, context(), viewer->seq, nests, false, render_audio, &gizmos);
// render the audio
QVector<Clip*> nests;
compose_sequence(viewer, context(), viewer->seq, nests, false, render_audio, &gizmos);
}
// try to draw the texture from the other thread if we got it
if (renderer->mutex.tryLock()) {
if (renderer->mutex.tryLock(10)) {
makeCurrent();
glClearColor(0.0, 0.0, 0.0, 1.0);
@@ -441,9 +444,20 @@ void ViewerWidget::paintGL() {
glDisable(GL_TEXTURE_2D);
renderer->mutex.unlock();
if (texture_failed) {
qDebug() << "texture failed, retry called";
retry_timer.start();
}
} else {
qDebug() << "renderer failed, retry called";
retry_timer.start();
just_repaint = true;
}
}
just_repaint = false;
/*drawn_gizmos = false;
force_quit = false;
+1
View File
@@ -67,6 +67,7 @@ private:
bool drawn_gizmos;
void move_gizmos(QMouseEvent *event, bool done);
RenderThread* renderer;
bool just_repaint;
private slots:
void retry();
void show_context_menu();