diff --git a/test/testgpu_spinning_cube.c b/test/testgpu_spinning_cube.c index 3ccc86170c..c8dc6c6926 100644 --- a/test/testgpu_spinning_cube.c +++ b/test/testgpu_spinning_cube.c @@ -240,7 +240,7 @@ static bool InitSpriteOverlay(SpriteRenderState *rs, SDL_Window *window) return true; } -static void UpdateRenderTarget(SpriteRenderState *rs, SpriteWindowState *ws, int w, int h) +static bool UpdateRenderTarget(SpriteRenderState *rs, SpriteWindowState *ws, int w, int h) { SDL_Renderer *renderer = rs->renderer; SDL_Texture *target = ws->target; @@ -249,18 +249,20 @@ static void UpdateRenderTarget(SpriteRenderState *rs, SpriteWindowState *ws, int if (target) { SDL_DestroyTexture(target); ws->target = NULL; + ws->texture = NULL; } target = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_BGRA32, SDL_TEXTUREACCESS_TARGET, w, h); if (!target) { SDL_Log("Couldn't create render target: %s", SDL_GetError()); - return; + return false; } SDL_SetRenderTarget(renderer, target); ws->target = target; ws->texture = (SDL_GPUTexture *)SDL_GetPointerProperty(SDL_GetTextureProperties(target), SDL_PROP_TEXTURE_GPU_TEXTURE_POINTER, NULL); } + return true; } static void UpdateSprites(SpriteRenderState *rs, SpriteWindowState *ws, int w, int h) @@ -322,7 +324,9 @@ static void UpdateSpriteOverlay(SpriteRenderState *rs, SpriteWindowState *ws, in { SDL_Renderer *renderer = rs->renderer; - UpdateRenderTarget(rs, ws, w, h); + if (!UpdateRenderTarget(rs, ws, w, h)) { + return; + } SDL_SetRenderDrawColor(renderer, 0, 0, 0, SDL_ALPHA_TRANSPARENT); SDL_RenderClear(renderer); @@ -341,6 +345,11 @@ static void RenderSpriteOverlay(SDL_GPURenderPass *pass, SpriteRenderState *rs, { SDL_GPUTextureSamplerBinding binding; + if (!ws->texture) { + /* Failed to create a texture, nothing to do */ + return; + } + SDL_zero(binding); binding.texture = ws->texture; binding.sampler = rs->sampler;