diff --git a/src/rendering/vulkan/system/vk_framebuffer.cpp b/src/rendering/vulkan/system/vk_framebuffer.cpp index 03ea17eb9..50c595b1f 100644 --- a/src/rendering/vulkan/system/vk_framebuffer.cpp +++ b/src/rendering/vulkan/system/vk_framebuffer.cpp @@ -61,6 +61,7 @@ VulkanFrameBuffer::VulkanFrameBuffer(void *hMonitor, bool fullscreen, VulkanDevi { device = dev; SetViewportRects(nullptr); + InitPalette(); } VulkanFrameBuffer::~VulkanFrameBuffer() @@ -264,6 +265,8 @@ void VulkanFrameBuffer::SetVSync(bool vsync) void VulkanFrameBuffer::CleanForRestart() { + // force recreation of the SW scene drawer to ensure it gets a new set of resources. + swdrawer.reset(); } IHardwareTexture *VulkanFrameBuffer::CreateHardwareTexture() diff --git a/src/rendering/vulkan/textures/vk_hwtexture.cpp b/src/rendering/vulkan/textures/vk_hwtexture.cpp index 9ee3b6edd..a6b1df4d1 100644 --- a/src/rendering/vulkan/textures/vk_hwtexture.cpp +++ b/src/rendering/vulkan/textures/vk_hwtexture.cpp @@ -213,8 +213,10 @@ void VkHardwareTexture::AllocateBuffer(int w, int h, int texelsize) { auto fb = GetVulkanFrameBuffer(); + VkFormat format = texelsize == 4 ? VK_FORMAT_B8G8R8A8_UNORM : VK_FORMAT_R8_UNORM; + ImageBuilder imgbuilder; - imgbuilder.setFormat(VK_FORMAT_B8G8R8A8_UNORM); + imgbuilder.setFormat(format); imgbuilder.setSize(w, h); imgbuilder.setUsage(VK_IMAGE_USAGE_SAMPLED_BIT, VMA_MEMORY_USAGE_CPU_TO_GPU); imgbuilder.setLinearTiling(); @@ -223,7 +225,7 @@ void VkHardwareTexture::AllocateBuffer(int w, int h, int texelsize) mTexelsize = texelsize; ImageViewBuilder viewbuilder; - viewbuilder.setImage(mImage.get(), texelsize == 4 ? VK_FORMAT_B8G8R8A8_UNORM : VK_FORMAT_R8_UNORM); + viewbuilder.setImage(mImage.get(), format); mImageView = viewbuilder.create(fb->device); auto cmdbuffer = fb->GetUploadCommands();