mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-03-24 08:00:14 +00:00
Fix loading screen graphical artifacts on window resize
Some checks are pending
Build / Build (arm64) (push) Waiting to run
Build / Build (x86-64) (push) Waiting to run
Build / Build (macOS arm64) (push) Waiting to run
Build / Build (windows-arm64) (push) Waiting to run
Build / Build (windows-x86-64) (push) Waiting to run
Security / CodeQL (C/C++) (push) Waiting to run
Security / Semgrep (push) Waiting to run
Security / Sanitizer Build (ASan/UBSan) (push) Waiting to run
Some checks are pending
Build / Build (arm64) (push) Waiting to run
Build / Build (x86-64) (push) Waiting to run
Build / Build (macOS arm64) (push) Waiting to run
Build / Build (windows-arm64) (push) Waiting to run
Build / Build (windows-x86-64) (push) Waiting to run
Security / CodeQL (C/C++) (push) Waiting to run
Security / Semgrep (push) Waiting to run
Security / Sanitizer Build (ASan/UBSan) (push) Waiting to run
Recreate Vulkan swapchain in LoadingScreen::render() when the dirty flag is set, so resizing the window during world loading no longer renders into a stale swapchain with mismatched framebuffers.
This commit is contained in:
parent
4c8fa9f1fe
commit
570dec8b88
3 changed files with 15 additions and 0 deletions
|
|
@ -5,6 +5,7 @@
|
|||
#include <imgui_internal.h>
|
||||
#include <imgui_impl_vulkan.h>
|
||||
#include <imgui_impl_sdl2.h>
|
||||
#include <SDL2/SDL.h>
|
||||
#include <random>
|
||||
#include <chrono>
|
||||
#include <cstdio>
|
||||
|
|
@ -327,6 +328,15 @@ void LoadingScreen::render() {
|
|||
|
||||
// Submit the frame to Vulkan (loading screen runs outside the main render loop)
|
||||
if (vkCtx) {
|
||||
// Handle window resize: recreate swapchain before acquiring an image
|
||||
if (vkCtx->isSwapchainDirty() && sdlWindow) {
|
||||
int w = 0, h = 0;
|
||||
SDL_GetWindowSize(sdlWindow, &w, &h);
|
||||
if (w > 0 && h > 0) {
|
||||
vkCtx->recreateSwapchain(w, h);
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t imageIndex = 0;
|
||||
VkCommandBuffer cmd = vkCtx->beginFrame(imageIndex);
|
||||
if (cmd != VK_NULL_HANDLE) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue