Vulkan Renderer - handle dynamic resetting of vsync, requires swapchain recreation.
This commit is contained in:
parent
b1431e6702
commit
97372b56e8
1 changed files with 11 additions and 5 deletions
|
@ -287,7 +287,7 @@ typedef struct
|
|||
VkFence *fences;
|
||||
VkSurfaceCapabilitiesKHR surfaceCapabilities;
|
||||
VkSurfaceFormatKHR *surfaceFormats;
|
||||
SDL_bool pixelSizeChanged;
|
||||
SDL_bool recreateSwapchain;
|
||||
|
||||
VkFramebuffer *framebuffers;
|
||||
VkRenderPass renderPasses[SDL_VULKAN_NUM_RENDERPASSES];
|
||||
|
@ -2225,7 +2225,7 @@ static VkResult VULKAN_CreateWindowSizeDependentResources(SDL_Renderer *renderer
|
|||
|
||||
result = VULKAN_CreateSwapChain(renderer, w, h);
|
||||
if (result != VK_SUCCESS) {
|
||||
rendererData->pixelSizeChanged = VK_TRUE;
|
||||
rendererData->recreateSwapchain = VK_TRUE;
|
||||
}
|
||||
|
||||
rendererData->viewportDirty = SDL_TRUE;
|
||||
|
@ -2248,7 +2248,7 @@ static void VULKAN_WindowEvent(SDL_Renderer *renderer, const SDL_WindowEvent *ev
|
|||
VULKAN_RenderData *rendererData = (VULKAN_RenderData *)renderer->driverdata;
|
||||
|
||||
if (event->type == SDL_EVENT_WINDOW_PIXEL_SIZE_CHANGED) {
|
||||
rendererData->pixelSizeChanged = SDL_TRUE;
|
||||
rendererData->recreateSwapchain = SDL_TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3361,11 +3361,11 @@ static int VULKAN_RunCommandQueue(SDL_Renderer *renderer, SDL_RenderCommand *cmd
|
|||
VULKAN_DrawStateCache stateCache;
|
||||
SDL_memset(&stateCache, 0, sizeof(stateCache));
|
||||
|
||||
if (rendererData->pixelSizeChanged) {
|
||||
if (rendererData->recreateSwapchain) {
|
||||
if (VULKAN_UpdateForWindowSizeChange(renderer) != VK_SUCCESS) {
|
||||
return -1;
|
||||
}
|
||||
rendererData->pixelSizeChanged = SDL_FALSE;
|
||||
rendererData->recreateSwapchain = SDL_FALSE;
|
||||
}
|
||||
|
||||
if (VULKAN_UpdateVertexBuffer(renderer, vertices, vertsize, &stateCache) < 0) {
|
||||
|
@ -3663,11 +3663,17 @@ static int VULKAN_RenderPresent(SDL_Renderer *renderer)
|
|||
|
||||
static int VULKAN_SetVSync(SDL_Renderer *renderer, const int vsync)
|
||||
{
|
||||
VULKAN_RenderData *rendererData = (VULKAN_RenderData *)renderer->driverdata;
|
||||
|
||||
Uint32 prevFlags = renderer->info.flags;
|
||||
if (vsync) {
|
||||
renderer->info.flags |= SDL_RENDERER_PRESENTVSYNC;
|
||||
} else {
|
||||
renderer->info.flags &= ~SDL_RENDERER_PRESENTVSYNC;
|
||||
}
|
||||
if (prevFlags != renderer->info.flags) {
|
||||
rendererData->recreateSwapchain = SDL_TRUE;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue