tests: Fix GPU tests crashing when window is minimized

This commit is contained in:
cosmonaut 2024-12-19 16:19:13 -08:00
parent c9e22d4672
commit 0f9e86fe1c
2 changed files with 25 additions and 14 deletions

View file

@ -87,22 +87,27 @@ SDL_AppResult SDL_AppIterate(void *appstate)
return SDL_APP_FAILURE; return SDL_APP_FAILURE;
} }
const double currentTime = (double)SDL_GetPerformanceCounter() / SDL_GetPerformanceFrequency(); if (swapchainTexture != NULL) {
SDL_GPURenderPass *renderPass; const double currentTime = (double)SDL_GetPerformanceCounter() / SDL_GetPerformanceFrequency();
SDL_GPUColorTargetInfo color_target_info; SDL_GPURenderPass *renderPass;
SDL_zero(color_target_info); SDL_GPUColorTargetInfo color_target_info;
color_target_info.texture = swapchainTexture; SDL_zero(color_target_info);
color_target_info.clear_color.r = (float)(0.5 + 0.5 * SDL_sin(currentTime)); color_target_info.texture = swapchainTexture;
color_target_info.clear_color.g = (float)(0.5 + 0.5 * SDL_sin(currentTime + SDL_PI_D * 2 / 3)); color_target_info.clear_color.r = (float)(0.5 + 0.5 * SDL_sin(currentTime));
color_target_info.clear_color.b = (float)(0.5 + 0.5 * SDL_sin(currentTime + SDL_PI_D * 4 / 3)); color_target_info.clear_color.g = (float)(0.5 + 0.5 * SDL_sin(currentTime + SDL_PI_D * 2 / 3));
color_target_info.clear_color.a = 1.0f; color_target_info.clear_color.b = (float)(0.5 + 0.5 * SDL_sin(currentTime + SDL_PI_D * 4 / 3));
color_target_info.load_op = SDL_GPU_LOADOP_CLEAR; color_target_info.clear_color.a = 1.0f;
color_target_info.store_op = SDL_GPU_STOREOP_STORE; color_target_info.load_op = SDL_GPU_LOADOP_CLEAR;
color_target_info.store_op = SDL_GPU_STOREOP_STORE;
renderPass = SDL_BeginGPURenderPass(cmdbuf, &color_target_info, 1, NULL); renderPass = SDL_BeginGPURenderPass(cmdbuf, &color_target_info, 1, NULL);
SDL_EndGPURenderPass(renderPass); SDL_EndGPURenderPass(renderPass);
SDL_SubmitGPUCommandBuffer(cmdbuf); SDL_SubmitGPUCommandBuffer(cmdbuf);
} else {
/* Swapchain is unavailable, cancel work */
SDL_CancelGPUCommandBuffer(cmdbuf);
}
frames++; frames++;

View file

@ -346,6 +346,12 @@ Render(SDL_Window *window, const int windownum)
quit(2); quit(2);
} }
if (swapchainTexture == NULL) {
/* Swapchain is unavailable, cancel work */
SDL_CancelGPUCommandBuffer(cmd);
return;
}
/* /*
* Do some rotation with Euler angles. It is not a fixed axis as * Do some rotation with Euler angles. It is not a fixed axis as
* quaternions would be, but the effect is cool. * quaternions would be, but the effect is cool.