|
@@ -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);
|
|
|
}
|
|
|
|