diff --git a/source/blender/gpu/vulkan/vk_context.cc b/source/blender/gpu/vulkan/vk_context.cc index c479c824507..2206097f776 100644 --- a/source/blender/gpu/vulkan/vk_context.cc +++ b/source/blender/gpu/vulkan/vk_context.cc @@ -215,7 +215,9 @@ void VKContext::deactivate_framebuffer() { VKFrameBuffer *framebuffer = active_framebuffer_get(); BLI_assert(framebuffer != nullptr); - framebuffer->rendering_end(*this); + if (framebuffer->is_rendering()) { + framebuffer->rendering_end(*this); + } active_fb = nullptr; } diff --git a/source/blender/gpu/vulkan/vk_framebuffer.cc b/source/blender/gpu/vulkan/vk_framebuffer.cc index c38622a723b..a35bf5650f1 100644 --- a/source/blender/gpu/vulkan/vk_framebuffer.cc +++ b/source/blender/gpu/vulkan/vk_framebuffer.cc @@ -37,6 +37,14 @@ VKFrameBuffer::VKFrameBuffer(const char *name) enabled_srgb_ = false; } +VKFrameBuffer::~VKFrameBuffer() +{ + VKContext &context = *VKContext::get(); + if (context.active_framebuffer_get() == this) { + context.deactivate_framebuffer(); + } +} + /** \} */ void VKFrameBuffer::bind(bool enabled_srgb) diff --git a/source/blender/gpu/vulkan/vk_framebuffer.hh b/source/blender/gpu/vulkan/vk_framebuffer.hh index 9caf7fcd718..8d698aaafb4 100644 --- a/source/blender/gpu/vulkan/vk_framebuffer.hh +++ b/source/blender/gpu/vulkan/vk_framebuffer.hh @@ -44,6 +44,7 @@ class VKFrameBuffer : public FrameBuffer { * Create a conventional frame-buffer to attach texture to. */ VKFrameBuffer(const char *name); + virtual ~VKFrameBuffer(); void bind(bool enabled_srgb) override; bool check(char err_out[256]) override;