threaded improvements
This commit is contained in:
@@ -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
@@ -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
@@ -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
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user