testgpu_spinning_cube: fixed error handling if texture creation fails
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user