mirror of
https://github.com/libsdl-org/SDL.git
synced 2025-05-18 02:38:27 +00:00
Replaced SDL_GetRendererInfo() with SDL_GetRendererName()
The texture formats are available via the SDL_PROP_RENDERER_TEXTURE_FORMATS_POINTER property Fixes https://github.com/libsdl-org/SDL/issues/9851
This commit is contained in:
parent
ca28bcb3b8
commit
a0d1445ccb
23 changed files with 106 additions and 116 deletions
|
@ -136,12 +136,14 @@ static const SDL_RenderDriver *render_drivers[] = {
|
|||
|
||||
int SDL_AddSupportedTextureFormat(SDL_Renderer *renderer, SDL_PixelFormatEnum format)
|
||||
{
|
||||
SDL_PixelFormatEnum *texture_formats = (SDL_PixelFormatEnum *)SDL_realloc((void *)renderer->info.texture_formats, (renderer->info.num_texture_formats + 1) * sizeof(SDL_PixelFormatEnum));
|
||||
SDL_PixelFormatEnum *texture_formats = (SDL_PixelFormatEnum *)SDL_realloc((void *)renderer->texture_formats, (renderer->num_texture_formats + 2) * sizeof(SDL_PixelFormatEnum));
|
||||
if (!texture_formats) {
|
||||
return -1;
|
||||
}
|
||||
texture_formats[renderer->info.num_texture_formats++] = format;
|
||||
renderer->info.texture_formats = texture_formats;
|
||||
texture_formats[renderer->num_texture_formats++] = format;
|
||||
texture_formats[renderer->num_texture_formats] = SDL_PIXELFORMAT_UNKNOWN;
|
||||
renderer->texture_formats = texture_formats;
|
||||
SDL_SetProperty(SDL_GetRendererProperties(renderer), SDL_PROP_RENDERER_TEXTURE_FORMATS_POINTER, texture_formats);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1068,7 +1070,7 @@ SDL_Renderer *SDL_CreateRendererWithProperties(SDL_PropertiesID props)
|
|||
}
|
||||
|
||||
new_props = SDL_GetRendererProperties(renderer);
|
||||
SDL_SetStringProperty(new_props, SDL_PROP_RENDERER_NAME_STRING, renderer->info.name);
|
||||
SDL_SetStringProperty(new_props, SDL_PROP_RENDERER_NAME_STRING, renderer->name);
|
||||
if (window) {
|
||||
SDL_SetProperty(new_props, SDL_PROP_RENDERER_WINDOW_POINTER, window);
|
||||
}
|
||||
|
@ -1098,7 +1100,7 @@ SDL_Renderer *SDL_CreateRendererWithProperties(SDL_PropertiesID props)
|
|||
SDL_CalculateSimulatedVSyncInterval(renderer, window);
|
||||
|
||||
SDL_LogInfo(SDL_LOG_CATEGORY_RENDER,
|
||||
"Created renderer: %s", renderer->info.name);
|
||||
"Created renderer: %s", renderer->name);
|
||||
|
||||
#ifdef SDL_PLATFORM_ANDROID
|
||||
Android_ActivityMutex_Unlock();
|
||||
|
@ -1115,7 +1117,7 @@ error:
|
|||
#ifdef SDL_PLATFORM_ANDROID
|
||||
Android_ActivityMutex_Unlock();
|
||||
#endif
|
||||
SDL_free((void *)renderer->info.texture_formats);
|
||||
SDL_free(renderer->texture_formats);
|
||||
SDL_free(renderer);
|
||||
return NULL;
|
||||
|
||||
|
@ -1162,12 +1164,11 @@ SDL_Window *SDL_GetRenderWindow(SDL_Renderer *renderer)
|
|||
return renderer->window;
|
||||
}
|
||||
|
||||
int SDL_GetRendererInfo(SDL_Renderer *renderer, SDL_RendererInfo *info)
|
||||
const char *SDL_GetRendererName(SDL_Renderer *renderer)
|
||||
{
|
||||
CHECK_RENDERER_MAGIC(renderer, -1);
|
||||
CHECK_RENDERER_MAGIC(renderer, NULL);
|
||||
|
||||
SDL_copyp(info, &renderer->info);
|
||||
return 0;
|
||||
return renderer->name;
|
||||
}
|
||||
|
||||
SDL_PropertiesID SDL_GetRendererProperties(SDL_Renderer *renderer)
|
||||
|
@ -1227,8 +1228,8 @@ static SDL_bool IsSupportedFormat(SDL_Renderer *renderer, SDL_PixelFormatEnum fo
|
|||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < renderer->info.num_texture_formats; ++i) {
|
||||
if (renderer->info.texture_formats[i] == format) {
|
||||
for (i = 0; i < renderer->num_texture_formats; ++i) {
|
||||
if (renderer->texture_formats[i] == format) {
|
||||
return SDL_TRUE;
|
||||
}
|
||||
}
|
||||
|
@ -1241,36 +1242,36 @@ static Uint32 GetClosestSupportedFormat(SDL_Renderer *renderer, SDL_PixelFormatE
|
|||
|
||||
if (SDL_ISPIXELFORMAT_FOURCC(format)) {
|
||||
/* Look for an exact match */
|
||||
for (i = 0; i < renderer->info.num_texture_formats; ++i) {
|
||||
if (renderer->info.texture_formats[i] == format) {
|
||||
return renderer->info.texture_formats[i];
|
||||
for (i = 0; i < renderer->num_texture_formats; ++i) {
|
||||
if (renderer->texture_formats[i] == format) {
|
||||
return renderer->texture_formats[i];
|
||||
}
|
||||
}
|
||||
} else if (SDL_ISPIXELFORMAT_10BIT(format) || SDL_ISPIXELFORMAT_FLOAT(format)) {
|
||||
if (SDL_ISPIXELFORMAT_10BIT(format)) {
|
||||
for (i = 0; i < renderer->info.num_texture_formats; ++i) {
|
||||
if (SDL_ISPIXELFORMAT_10BIT(renderer->info.texture_formats[i])) {
|
||||
return renderer->info.texture_formats[i];
|
||||
for (i = 0; i < renderer->num_texture_formats; ++i) {
|
||||
if (SDL_ISPIXELFORMAT_10BIT(renderer->texture_formats[i])) {
|
||||
return renderer->texture_formats[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
for (i = 0; i < renderer->info.num_texture_formats; ++i) {
|
||||
if (SDL_ISPIXELFORMAT_FLOAT(renderer->info.texture_formats[i])) {
|
||||
return renderer->info.texture_formats[i];
|
||||
for (i = 0; i < renderer->num_texture_formats; ++i) {
|
||||
if (SDL_ISPIXELFORMAT_FLOAT(renderer->texture_formats[i])) {
|
||||
return renderer->texture_formats[i];
|
||||
}
|
||||
}
|
||||
} else {
|
||||
SDL_bool hasAlpha = SDL_ISPIXELFORMAT_ALPHA(format);
|
||||
|
||||
/* We just want to match the first format that has the same channels */
|
||||
for (i = 0; i < renderer->info.num_texture_formats; ++i) {
|
||||
if (!SDL_ISPIXELFORMAT_FOURCC(renderer->info.texture_formats[i]) &&
|
||||
SDL_ISPIXELFORMAT_ALPHA(renderer->info.texture_formats[i]) == hasAlpha) {
|
||||
return renderer->info.texture_formats[i];
|
||||
for (i = 0; i < renderer->num_texture_formats; ++i) {
|
||||
if (!SDL_ISPIXELFORMAT_FOURCC(renderer->texture_formats[i]) &&
|
||||
SDL_ISPIXELFORMAT_ALPHA(renderer->texture_formats[i]) == hasAlpha) {
|
||||
return renderer->texture_formats[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
return renderer->info.texture_formats[0];
|
||||
return renderer->texture_formats[0];
|
||||
}
|
||||
|
||||
SDL_Texture *SDL_CreateTextureWithProperties(SDL_Renderer *renderer, SDL_PropertiesID props)
|
||||
|
@ -1286,7 +1287,7 @@ SDL_Texture *SDL_CreateTextureWithProperties(SDL_Renderer *renderer, SDL_Propert
|
|||
CHECK_RENDERER_MAGIC(renderer, NULL);
|
||||
|
||||
if (!format) {
|
||||
format = renderer->info.texture_formats[0];
|
||||
format = renderer->texture_formats[0];
|
||||
}
|
||||
if (SDL_BYTESPERPIXEL(format) == 0) {
|
||||
SDL_SetError("Invalid texture format");
|
||||
|
@ -1356,7 +1357,7 @@ SDL_Texture *SDL_CreateTextureWithProperties(SDL_Renderer *renderer, SDL_Propert
|
|||
if (!texture_is_fourcc_and_target) {
|
||||
closest_format = GetClosestSupportedFormat(renderer, format);
|
||||
} else {
|
||||
closest_format = renderer->info.texture_formats[0];
|
||||
closest_format = renderer->texture_formats[0];
|
||||
}
|
||||
|
||||
SDL_SetNumberProperty(native_props, SDL_PROP_TEXTURE_CREATE_COLORSPACE_NUMBER, texture->colorspace);
|
||||
|
@ -1476,15 +1477,15 @@ SDL_Texture *SDL_CreateTextureFromSurface(SDL_Renderer *renderer, SDL_Surface *s
|
|||
/* No alpha, but a colorkey => promote to alpha */
|
||||
if (!fmt->Amask && SDL_SurfaceHasColorKey(surface)) {
|
||||
if (fmt->format == SDL_PIXELFORMAT_XRGB8888) {
|
||||
for (i = 0; i < renderer->info.num_texture_formats; ++i) {
|
||||
if (renderer->info.texture_formats[i] == SDL_PIXELFORMAT_ARGB8888) {
|
||||
for (i = 0; i < renderer->num_texture_formats; ++i) {
|
||||
if (renderer->texture_formats[i] == SDL_PIXELFORMAT_ARGB8888) {
|
||||
format = SDL_PIXELFORMAT_ARGB8888;
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else if (fmt->format == SDL_PIXELFORMAT_XBGR8888) {
|
||||
for (i = 0; i < renderer->info.num_texture_formats; ++i) {
|
||||
if (renderer->info.texture_formats[i] == SDL_PIXELFORMAT_ABGR8888) {
|
||||
for (i = 0; i < renderer->num_texture_formats; ++i) {
|
||||
if (renderer->texture_formats[i] == SDL_PIXELFORMAT_ABGR8888) {
|
||||
format = SDL_PIXELFORMAT_ABGR8888;
|
||||
break;
|
||||
}
|
||||
|
@ -1492,8 +1493,8 @@ SDL_Texture *SDL_CreateTextureFromSurface(SDL_Renderer *renderer, SDL_Surface *s
|
|||
}
|
||||
} else {
|
||||
/* Exact match would be fine */
|
||||
for (i = 0; i < renderer->info.num_texture_formats; ++i) {
|
||||
if (renderer->info.texture_formats[i] == fmt->format) {
|
||||
for (i = 0; i < renderer->num_texture_formats; ++i) {
|
||||
if (renderer->texture_formats[i] == fmt->format) {
|
||||
format = fmt->format;
|
||||
break;
|
||||
}
|
||||
|
@ -1502,9 +1503,9 @@ SDL_Texture *SDL_CreateTextureFromSurface(SDL_Renderer *renderer, SDL_Surface *s
|
|||
|
||||
/* Look for 10-bit pixel formats if needed */
|
||||
if (format == SDL_PIXELFORMAT_UNKNOWN && SDL_ISPIXELFORMAT_10BIT(fmt->format)) {
|
||||
for (i = 0; i < renderer->info.num_texture_formats; ++i) {
|
||||
if (SDL_ISPIXELFORMAT_10BIT(renderer->info.texture_formats[i])) {
|
||||
format = renderer->info.texture_formats[i];
|
||||
for (i = 0; i < renderer->num_texture_formats; ++i) {
|
||||
if (SDL_ISPIXELFORMAT_10BIT(renderer->texture_formats[i])) {
|
||||
format = renderer->texture_formats[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -1513,9 +1514,9 @@ SDL_Texture *SDL_CreateTextureFromSurface(SDL_Renderer *renderer, SDL_Surface *s
|
|||
/* Look for floating point pixel formats if needed */
|
||||
if (format == SDL_PIXELFORMAT_UNKNOWN &&
|
||||
(SDL_ISPIXELFORMAT_10BIT(fmt->format) || SDL_ISPIXELFORMAT_FLOAT(fmt->format))) {
|
||||
for (i = 0; i < renderer->info.num_texture_formats; ++i) {
|
||||
if (SDL_ISPIXELFORMAT_FLOAT(renderer->info.texture_formats[i])) {
|
||||
format = renderer->info.texture_formats[i];
|
||||
for (i = 0; i < renderer->num_texture_formats; ++i) {
|
||||
if (SDL_ISPIXELFORMAT_FLOAT(renderer->texture_formats[i])) {
|
||||
format = renderer->texture_formats[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -1523,11 +1524,11 @@ SDL_Texture *SDL_CreateTextureFromSurface(SDL_Renderer *renderer, SDL_Surface *s
|
|||
|
||||
/* Fallback, choose a valid pixel format */
|
||||
if (format == SDL_PIXELFORMAT_UNKNOWN) {
|
||||
format = renderer->info.texture_formats[0];
|
||||
for (i = 0; i < renderer->info.num_texture_formats; ++i) {
|
||||
if (!SDL_ISPIXELFORMAT_FOURCC(renderer->info.texture_formats[i]) &&
|
||||
SDL_ISPIXELFORMAT_ALPHA(renderer->info.texture_formats[i]) == needAlpha) {
|
||||
format = renderer->info.texture_formats[i];
|
||||
format = renderer->texture_formats[0];
|
||||
for (i = 0; i < renderer->num_texture_formats; ++i) {
|
||||
if (!SDL_ISPIXELFORMAT_FOURCC(renderer->texture_formats[i]) &&
|
||||
SDL_ISPIXELFORMAT_ALPHA(renderer->texture_formats[i]) == needAlpha) {
|
||||
format = renderer->texture_formats[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -4597,7 +4598,7 @@ void SDL_DestroyRenderer(SDL_Renderer *renderer)
|
|||
SDL_SetObjectValid(renderer, SDL_OBJECT_TYPE_RENDERER, SDL_FALSE); // It's no longer magical...
|
||||
}
|
||||
|
||||
SDL_free((void *)renderer->info.texture_formats);
|
||||
SDL_free(renderer->texture_formats);
|
||||
SDL_free(renderer);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue