From f5d66436faa6f24030cd8563da703796bd9bc72b Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Tue, 10 Dec 2019 21:32:21 +1100 Subject: [PATCH] attempt to use fbo clear function --- app/render/backend/audio/audiobackend.cpp | 13 ------------- app/render/backend/audio/audiobackend.h | 3 --- app/render/backend/audiorenderbackend.cpp | 4 ++++ app/render/backend/opengl/openglframebuffer.cpp | 4 ++-- app/render/backend/opengl/openglframebuffer.h | 2 +- app/render/backend/opengl/openglworker.cpp | 11 ++--------- app/render/backend/renderbackend.cpp | 2 +- app/render/backend/videorenderbackend.cpp | 6 +++--- 8 files changed, 13 insertions(+), 32 deletions(-) diff --git a/app/render/backend/audio/audiobackend.cpp b/app/render/backend/audio/audiobackend.cpp index 19c0cbce2..aefe99b1e 100644 --- a/app/render/backend/audio/audiobackend.cpp +++ b/app/render/backend/audio/audiobackend.cpp @@ -19,19 +19,6 @@ QIODevice *AudioBackend::GetAudioPullDevice() return &pull_device_; } -void AudioBackend::InvalidateCache(const rational &start_range, const rational &end_range) -{ - /* - // Truncate to length if necessary - int max_length_in_bytes = params().time_to_bytes(viewer_node()->Length()); - if (pcm_data_.size() > max_length_in_bytes) { - pcm_data_.resize(max_length_in_bytes); - } - */ - - AudioRenderBackend::InvalidateCache(start_range, end_range); -} - bool AudioBackend::InitInternal() { // Initiate one thread per CPU core diff --git a/app/render/backend/audio/audiobackend.h b/app/render/backend/audio/audiobackend.h index 341c20473..38677b801 100644 --- a/app/render/backend/audio/audiobackend.h +++ b/app/render/backend/audio/audiobackend.h @@ -15,9 +15,6 @@ public: virtual QIODevice* GetAudioPullDevice() override; -public slots: - virtual void InvalidateCache(const rational &start_range, const rational &end_range) override; - protected: virtual bool InitInternal() override; diff --git a/app/render/backend/audiorenderbackend.cpp b/app/render/backend/audiorenderbackend.cpp index f2f5d6f8f..e9cdf3923 100644 --- a/app/render/backend/audiorenderbackend.cpp +++ b/app/render/backend/audiorenderbackend.cpp @@ -29,6 +29,10 @@ void AudioRenderBackend::SetParameters(const AudioRenderingParams ¶ms) void AudioRenderBackend::InvalidateCache(const rational &start_range, const rational &end_range) { + if (!params_.is_valid()) { + return; + } + RenderBackend::InvalidateCache(start_range, end_range); rational start_range_adj = qMax(rational(0), start_range); diff --git a/app/render/backend/opengl/openglframebuffer.cpp b/app/render/backend/opengl/openglframebuffer.cpp index 9153e9659..568a35314 100644 --- a/app/render/backend/opengl/openglframebuffer.cpp +++ b/app/render/backend/opengl/openglframebuffer.cpp @@ -88,14 +88,14 @@ void OpenGLFramebuffer::Release() context_->functions()->glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); } -void OpenGLFramebuffer::Attach(OpenGLTexturePtr texture) +void OpenGLFramebuffer::Attach(OpenGLTexturePtr texture, bool clear) { if (context_ == nullptr) { return; } texture_ = texture; - AttachInternal(texture_->texture(), false); + AttachInternal(texture_->texture(), clear); } void OpenGLFramebuffer::Detach() diff --git a/app/render/backend/opengl/openglframebuffer.h b/app/render/backend/opengl/openglframebuffer.h index 7b74e925f..dfea1dacb 100644 --- a/app/render/backend/opengl/openglframebuffer.h +++ b/app/render/backend/opengl/openglframebuffer.h @@ -43,7 +43,7 @@ public: void Release(); - void Attach(OpenGLTexturePtr texture); + void Attach(OpenGLTexturePtr texture, bool clear = false); void Detach(); diff --git a/app/render/backend/opengl/openglworker.cpp b/app/render/backend/opengl/openglworker.cpp index f6dcdfc69..b2cb0a7ca 100644 --- a/app/render/backend/opengl/openglworker.cpp +++ b/app/render/backend/opengl/openglworker.cpp @@ -111,13 +111,10 @@ void OpenGLWorker::FrameToValue(StreamPtr stream, FramePtr frame, NodeValueTable // Set viewport for texture size functions_->glViewport(0, 0, footage_tex_ref->texture()->width(), footage_tex_ref->texture()->height()); - buffer_.Attach(associated_tex_ref->texture()); + buffer_.Attach(associated_tex_ref->texture(), true); buffer_.Bind(); footage_tex_ref->texture()->Bind(); - functions_->glClearColor(0.0, 0.0, 0.0, 0.0); - functions_->glClear(GL_COLOR_BUFFER_BIT); - // Blit old texture to new texture through OCIO shader color_processor->ProcessOpenGL(); @@ -156,13 +153,9 @@ void OpenGLWorker::RunNodeAccelerated(const Node *node, const NodeValueDatabase // Create the output texture OpenGLTextureCache::ReferencePtr output_ref = texture_cache_->Get(video_params()); - buffer_.Attach(output_ref->texture()); - + buffer_.Attach(output_ref->texture(), true); buffer_.Bind(); - functions_->glClearColor(0.0, 0.0, 0.0, 0.0); - functions_->glClear(GL_COLOR_BUFFER_BIT); - // Lock the shader so no other thread interferes as we set parameters and draw (and we don't interfere with any others) shader->Lock(); shader->bind(); diff --git a/app/render/backend/renderbackend.cpp b/app/render/backend/renderbackend.cpp index 843077950..3316eed05 100644 --- a/app/render/backend/renderbackend.cpp +++ b/app/render/backend/renderbackend.cpp @@ -256,7 +256,7 @@ void RenderBackend::CacheNext() if (!WorkerIsBusy(worker)) { TimeRange cache_frame = cache_queue_.takeFirst(); - //qDebug() << "Rendering" << cache_frame.in().toDouble() << "-" << cache_frame.out().toDouble(); + qDebug() << "Rendering" << cache_frame.in().toDouble(); NodeDependency dep = NodeDependency(node_connected_to_viewer, cache_frame.in(), cache_frame.out()); diff --git a/app/render/backend/videorenderbackend.cpp b/app/render/backend/videorenderbackend.cpp index 5e492894b..96a6ce248 100644 --- a/app/render/backend/videorenderbackend.cpp +++ b/app/render/backend/videorenderbackend.cpp @@ -81,13 +81,13 @@ void VideoRenderBackend::InvalidateCache(const rational &start_range, const rati rational compare = cache_queue_.at(i).in(); rational compare_diff = compare - last_time; - if (compare_diff > diff) { - cache_queue_.insert(i, new_range); + if (compare == r) { added = true; break; } - if (compare == r) { + if (compare_diff > diff) { + cache_queue_.insert(i, new_range); added = true; break; }