testgpu_spinning_cube: fixed error handling if texture creation fails

This commit is contained in:
Sam Lantinga
2025-11-24 08:31:38 -08:00
parent ba919832e4
commit ebd3aa5289

View File

@@ -240,7 +240,7 @@ static bool InitSpriteOverlay(SpriteRenderState *rs, SDL_Window *window)
return true; 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_Renderer *renderer = rs->renderer;
SDL_Texture *target = ws->target; SDL_Texture *target = ws->target;
@@ -249,18 +249,20 @@ static void UpdateRenderTarget(SpriteRenderState *rs, SpriteWindowState *ws, int
if (target) { if (target) {
SDL_DestroyTexture(target); SDL_DestroyTexture(target);
ws->target = NULL; ws->target = NULL;
ws->texture = NULL;
} }
target = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_BGRA32, SDL_TEXTUREACCESS_TARGET, w, h); target = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_BGRA32, SDL_TEXTUREACCESS_TARGET, w, h);
if (!target) { if (!target) {
SDL_Log("Couldn't create render target: %s", SDL_GetError()); SDL_Log("Couldn't create render target: %s", SDL_GetError());
return; return false;
} }
SDL_SetRenderTarget(renderer, target); SDL_SetRenderTarget(renderer, target);
ws->target = target; ws->target = target;
ws->texture = (SDL_GPUTexture *)SDL_GetPointerProperty(SDL_GetTextureProperties(target), SDL_PROP_TEXTURE_GPU_TEXTURE_POINTER, NULL); 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) 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; 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_SetRenderDrawColor(renderer, 0, 0, 0, SDL_ALPHA_TRANSPARENT);
SDL_RenderClear(renderer); SDL_RenderClear(renderer);
@@ -341,6 +345,11 @@ static void RenderSpriteOverlay(SDL_GPURenderPass *pass, SpriteRenderState *rs,
{ {
SDL_GPUTextureSamplerBinding binding; SDL_GPUTextureSamplerBinding binding;
if (!ws->texture) {
/* Failed to create a texture, nothing to do */
return;
}
SDL_zero(binding); SDL_zero(binding);
binding.texture = ws->texture; binding.texture = ws->texture;
binding.sampler = rs->sampler; binding.sampler = rs->sampler;