mirror of
https://github.com/libsdl-org/SDL.git
synced 2025-09-27 21:48:29 +00:00
Handle window resizing on the render thread in D3D11 and D3D12
This prevents crashing when a separate thread is being used for rendering Discussion and sample code in https://github.com/libsdl-org/SDL/issues/8528
This commit is contained in:
@@ -174,6 +174,7 @@ typedef struct
|
||||
ID3D12GraphicsCommandList2 *commandList;
|
||||
DXGI_SWAP_EFFECT swapEffect;
|
||||
UINT swapFlags;
|
||||
SDL_bool pixelSizeChanged;
|
||||
|
||||
/* Descriptor heaps */
|
||||
ID3D12DescriptorHeap *rtvDescriptorHeap;
|
||||
@@ -1386,8 +1387,10 @@ static HRESULT D3D12_UpdateForWindowSizeChange(SDL_Renderer *renderer)
|
||||
|
||||
static void D3D12_WindowEvent(SDL_Renderer *renderer, const SDL_WindowEvent *event)
|
||||
{
|
||||
D3D12_RenderData *data = (D3D12_RenderData *)renderer->driverdata;
|
||||
|
||||
if (event->type == SDL_EVENT_WINDOW_PIXEL_SIZE_CHANGED) {
|
||||
D3D12_UpdateForWindowSizeChange(renderer);
|
||||
data->pixelSizeChanged = SDL_TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2562,6 +2565,11 @@ static int D3D12_RunCommandQueue(SDL_Renderer *renderer, SDL_RenderCommand *cmd,
|
||||
D3D12_RenderData *rendererData = (D3D12_RenderData *)renderer->driverdata;
|
||||
const int viewportRotation = D3D12_GetRotationForCurrentRenderTarget(renderer);
|
||||
|
||||
if (rendererData->pixelSizeChanged) {
|
||||
D3D12_UpdateForWindowSizeChange(renderer);
|
||||
rendererData->pixelSizeChanged = SDL_FALSE;
|
||||
}
|
||||
|
||||
if (rendererData->currentViewportRotation != viewportRotation) {
|
||||
rendererData->currentViewportRotation = viewportRotation;
|
||||
rendererData->viewportDirty = SDL_TRUE;
|
||||
|
Reference in New Issue
Block a user