From b29a05bbda8a5de9b5a1094bd15c22479d7c1781 Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Tue, 19 Mar 2019 21:05:13 +1100 Subject: [PATCH] reimplemented tsa and gizmos --- ui/viewerwidget.cpp | 39 ++++++++++++++++++++++++++++++++++----- ui/viewerwidget.h | 4 ++++ 2 files changed, 38 insertions(+), 5 deletions(-) diff --git a/ui/viewerwidget.cpp b/ui/viewerwidget.cpp index 1da659e98..73fe329f0 100644 --- a/ui/viewerwidget.cpp +++ b/ui/viewerwidget.cpp @@ -41,7 +41,6 @@ extern "C" { #include #include #include -#include #include "panels/panels.h" #include "project/projectelements.h" @@ -62,6 +61,8 @@ extern "C" { #include "ui/menu.h" #include "mainwindow.h" +const int kTitleActionSafeVertexSize = 84; + ViewerWidget::ViewerWidget(QWidget *parent) : QOpenGLWidget(parent), waveform(false), @@ -221,6 +222,13 @@ void ViewerWidget::initializeGL() { connect(context(), SIGNAL(aboutToBeDestroyed()), this, SLOT(context_destroy()), Qt::DirectConnection); pipeline_ = olive::rendering::GetPipeline(); + + vao_.create(); + + title_safe_area_buffer_.create(); + title_safe_area_buffer_.bind(); + title_safe_area_buffer_.allocate(nullptr, kTitleActionSafeVertexSize * sizeof(GLfloat)); + title_safe_area_buffer_.release(); } void ViewerWidget::frame_update() { @@ -277,6 +285,10 @@ void ViewerWidget::context_destroy() { renderer.delete_ctx(); + title_safe_area_buffer_.destroy(); + + vao_.destroy(); + pipeline_ = nullptr; doneCurrent(); @@ -509,14 +521,23 @@ void ViewerWidget::draw_title_safe_area() { 0.5f, 0.55f, 0.0f }; + vao_.bind(); + + title_safe_area_buffer_.bind(); + title_safe_area_buffer_.write(0, vertices, kTitleActionSafeVertexSize * sizeof(GLfloat)); + GLuint vertex_location = pipeline_->attributeLocation("a_position"); func->glEnableVertexAttribArray(vertex_location); - func->glVertexAttribPointer(vertex_location, 3, GL_FLOAT, GL_FALSE, 0, vertices); + func->glVertexAttribPointer(vertex_location, 3, GL_FLOAT, GL_FALSE, 0, 0); func->glDrawArrays(GL_LINES, 0, 28); pipeline_->setUniformValue("color_only", false); + title_safe_area_buffer_.release(); + + vao_.release(); + pipeline_->release(); } @@ -647,14 +668,23 @@ void ViewerWidget::draw_gizmos() { } } + vao_.bind(); + + QOpenGLBuffer vertex_buffer; + vertex_buffer.create(); + vertex_buffer.bind(); + vertex_buffer.allocate(vertices.constData(), vertices.size() * sizeof(GLfloat)); + GLuint vertex_location = pipeline_->attributeLocation("a_position"); func->glEnableVertexAttribArray(vertex_location); - func->glVertexAttribPointer(vertex_location, 3, GL_FLOAT, GL_FALSE, 0, vertices.constData()); + func->glVertexAttribPointer(vertex_location, 3, GL_FLOAT, GL_FALSE, 0, 0); func->glDrawArrays(GL_LINES, 0, vertices.size() / 3); pipeline_->setUniformValue("color_only", false); + vao_.release(); + pipeline_->release(); } @@ -669,10 +699,10 @@ void ViewerWidget::paintGL() { tex_lock->lock(); QOpenGLFunctions* f = context()->functions(); - //QOpenGLExtraFunctions* xf = context()->extraFunctions(); makeCurrent(); + // clear to solid black f->glClearColor(0.0, 0.0, 0.0, 0.0); f->glClear(GL_COLOR_BUFFER_BIT); @@ -680,7 +710,6 @@ void ViewerWidget::paintGL() { // draw texture from render thread - f->glViewport(0, 0, width(), height()); f->glBindTexture(GL_TEXTURE_2D, tex); diff --git a/ui/viewerwidget.h b/ui/viewerwidget.h index 2ae8460da..580bf3a3f 100644 --- a/ui/viewerwidget.h +++ b/ui/viewerwidget.h @@ -29,6 +29,8 @@ #include #include #include +#include +#include #include "timeline/clip.h" #include "project/footage.h" @@ -94,6 +96,8 @@ private: double y_scroll; QOpenGLShaderProgramPtr pipeline_; + QOpenGLVertexArrayObject vao_; + QOpenGLBuffer title_safe_area_buffer_; private slots: void context_destroy();