diff --git a/app/render/backend/opengl/openglframebuffer.cpp b/app/render/backend/opengl/openglframebuffer.cpp index 568a35314..8da990c5d 100644 --- a/app/render/backend/opengl/openglframebuffer.cpp +++ b/app/render/backend/opengl/openglframebuffer.cpp @@ -77,7 +77,7 @@ void OpenGLFramebuffer::Bind() if (context_ == nullptr) { return; } - context_->functions()->glBindFramebuffer(GL_DRAW_FRAMEBUFFER, buffer_); + context_->functions()->glBindFramebuffer(GL_FRAMEBUFFER, buffer_); } void OpenGLFramebuffer::Release() @@ -85,7 +85,7 @@ void OpenGLFramebuffer::Release() if (context_ == nullptr) { return; } - context_->functions()->glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); + context_->functions()->glBindFramebuffer(GL_FRAMEBUFFER, 0); } void OpenGLFramebuffer::Attach(OpenGLTexturePtr texture, bool clear) @@ -94,47 +94,17 @@ void OpenGLFramebuffer::Attach(OpenGLTexturePtr texture, bool clear) return; } - texture_ = texture; - AttachInternal(texture_->texture(), clear); -} - -void OpenGLFramebuffer::Detach() -{ - if (context_ == nullptr) { - return; - } - - QOpenGLFunctions* f = context_->functions(); - - // bind framebuffer for attaching - f->glBindFramebuffer(GL_DRAW_FRAMEBUFFER, buffer_); - - context_->extraFunctions()->glFramebufferTexture2D( - GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 0, 0 - ); - - // release framebuffer - f->glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); - - texture_ = nullptr; -} - -const GLuint &OpenGLFramebuffer::buffer() const -{ - return buffer_; -} - -void OpenGLFramebuffer::AttachInternal(GLuint tex, bool clear) -{ Detach(); + texture_ = texture; + QOpenGLFunctions* f = context_->functions(); // bind framebuffer for attaching - f->glBindFramebuffer(GL_DRAW_FRAMEBUFFER, buffer_); + f->glBindFramebuffer(GL_FRAMEBUFFER, buffer_); context_->extraFunctions()->glFramebufferTexture2D( - GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, tex, 0 + GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture_->texture(), 0 ); if (clear) { @@ -143,5 +113,33 @@ void OpenGLFramebuffer::AttachInternal(GLuint tex, bool clear) } // release framebuffer - f->glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); + f->glBindFramebuffer(GL_FRAMEBUFFER, 0); +} + +void OpenGLFramebuffer::Detach() +{ + if (context_ == nullptr) { + return; + } + + if (texture_) { + QOpenGLFunctions* f = context_->functions(); + + // bind framebuffer for attaching + f->glBindFramebuffer(GL_FRAMEBUFFER, buffer_); + + context_->extraFunctions()->glFramebufferTexture2D( + GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 0, 0 + ); + + // release framebuffer + f->glBindFramebuffer(GL_FRAMEBUFFER, 0); + + texture_ = nullptr; + } +} + +const GLuint &OpenGLFramebuffer::buffer() const +{ + return buffer_; } diff --git a/app/render/backend/opengl/openglframebuffer.h b/app/render/backend/opengl/openglframebuffer.h index dfea1dacb..7f109232d 100644 --- a/app/render/backend/opengl/openglframebuffer.h +++ b/app/render/backend/opengl/openglframebuffer.h @@ -53,8 +53,6 @@ public slots: void Destroy(); private: - void AttachInternal(GLuint tex, bool clear); - QOpenGLContext* context_; GLuint buffer_; diff --git a/app/render/backend/opengl/opengltexture.cpp b/app/render/backend/opengl/opengltexture.cpp index a967d2899..2bed8574f 100644 --- a/app/render/backend/opengl/opengltexture.cpp +++ b/app/render/backend/opengl/opengltexture.cpp @@ -47,7 +47,7 @@ bool OpenGLTexture::IsCreated() const void OpenGLTexture::Create(QOpenGLContext *ctx, int width, int height, const olive::PixelFormat &format, const void* data) { if (!ctx) { - qWarning() << "RenderTexture::Create was passed an invalid context"; + qWarning() << "OpenGLTexture::Create was passed an invalid context"; return; } @@ -86,7 +86,7 @@ void OpenGLTexture::Bind() QOpenGLContext* context = QOpenGLContext::currentContext(); if (!context) { - qWarning() << "RenderTexture::Bind() called with an invalid context"; + qWarning() << "OpenGLTexture::Bind() called with an invalid context"; return; } @@ -98,7 +98,7 @@ void OpenGLTexture::Release() QOpenGLContext* context = QOpenGLContext::currentContext(); if (!context) { - qWarning() << "RenderTexture::Release() called with an invalid context"; + qWarning() << "OpenGLTexture::Release() called with an invalid context"; return; } @@ -128,14 +128,14 @@ const GLuint &OpenGLTexture::texture() const void OpenGLTexture::Upload(const void *data) { if (!IsCreated()) { - qWarning() << "RenderTexture::Upload() called while it wasn't created"; + qWarning() << "OpenGLTexture::Upload() called while it wasn't created"; return; } QOpenGLContext* context = QOpenGLContext::currentContext(); if (!context) { - qWarning() << "RenderTexture::Release() called with an invalid context"; + qWarning() << "OpenGLTexture::Release() called with an invalid context"; return; } @@ -159,7 +159,7 @@ void OpenGLTexture::Upload(const void *data) uchar *OpenGLTexture::Download() const { if (!IsCreated()) { - qWarning() << "RenderTexture::Download() called while it wasn't created"; + qWarning() << "OpenGLTexture::Download() called while it wasn't created"; return nullptr; }