mirror of
https://github.com/libsdl-org/SDL.git
synced 2025-09-18 01:08:16 +00:00
Added support for SDL_PIXELFORMAT_ABGR8888 textures
This is the output format of stb_image for image decoding, so let's avoid a texture format conversion where possible. Also standardized SDL_PIXELFORMAT_ARGB8888 as the default texture format for all renderers.
This commit is contained in:
@@ -231,6 +231,9 @@ SDL_PixelFormat D3D11_DXGIFormatToSDLPixelFormat(DXGI_FORMAT dxgiFormat)
|
|||||||
case DXGI_FORMAT_B8G8R8A8_UNORM:
|
case DXGI_FORMAT_B8G8R8A8_UNORM:
|
||||||
case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB:
|
case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB:
|
||||||
return SDL_PIXELFORMAT_ARGB8888;
|
return SDL_PIXELFORMAT_ARGB8888;
|
||||||
|
case DXGI_FORMAT_R8G8B8A8_UNORM:
|
||||||
|
case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB:
|
||||||
|
return SDL_PIXELFORMAT_ABGR8888;
|
||||||
case DXGI_FORMAT_B8G8R8X8_UNORM:
|
case DXGI_FORMAT_B8G8R8X8_UNORM:
|
||||||
case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB:
|
case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB:
|
||||||
return SDL_PIXELFORMAT_XRGB8888;
|
return SDL_PIXELFORMAT_XRGB8888;
|
||||||
@@ -255,6 +258,11 @@ static DXGI_FORMAT SDLPixelFormatToDXGITextureFormat(Uint32 format, Uint32 outpu
|
|||||||
return DXGI_FORMAT_B8G8R8A8_UNORM_SRGB;
|
return DXGI_FORMAT_B8G8R8A8_UNORM_SRGB;
|
||||||
}
|
}
|
||||||
return DXGI_FORMAT_B8G8R8A8_UNORM;
|
return DXGI_FORMAT_B8G8R8A8_UNORM;
|
||||||
|
case SDL_PIXELFORMAT_ABGR8888:
|
||||||
|
if (output_colorspace == SDL_COLORSPACE_SRGB_LINEAR) {
|
||||||
|
return DXGI_FORMAT_R8G8B8A8_UNORM_SRGB;
|
||||||
|
}
|
||||||
|
return DXGI_FORMAT_R8G8B8A8_UNORM;
|
||||||
case SDL_PIXELFORMAT_XRGB8888:
|
case SDL_PIXELFORMAT_XRGB8888:
|
||||||
if (output_colorspace == SDL_COLORSPACE_SRGB_LINEAR) {
|
if (output_colorspace == SDL_COLORSPACE_SRGB_LINEAR) {
|
||||||
return DXGI_FORMAT_B8G8R8X8_UNORM_SRGB;
|
return DXGI_FORMAT_B8G8R8X8_UNORM_SRGB;
|
||||||
@@ -285,6 +293,11 @@ static DXGI_FORMAT SDLPixelFormatToDXGIMainResourceViewFormat(Uint32 format, Uin
|
|||||||
return DXGI_FORMAT_B8G8R8A8_UNORM_SRGB;
|
return DXGI_FORMAT_B8G8R8A8_UNORM_SRGB;
|
||||||
}
|
}
|
||||||
return DXGI_FORMAT_B8G8R8A8_UNORM;
|
return DXGI_FORMAT_B8G8R8A8_UNORM;
|
||||||
|
case SDL_PIXELFORMAT_ABGR8888:
|
||||||
|
if (colorspace == SDL_COLORSPACE_SRGB_LINEAR) {
|
||||||
|
return DXGI_FORMAT_R8G8B8A8_UNORM_SRGB;
|
||||||
|
}
|
||||||
|
return DXGI_FORMAT_R8G8B8A8_UNORM;
|
||||||
case SDL_PIXELFORMAT_XRGB8888:
|
case SDL_PIXELFORMAT_XRGB8888:
|
||||||
if (colorspace == SDL_COLORSPACE_SRGB_LINEAR) {
|
if (colorspace == SDL_COLORSPACE_SRGB_LINEAR) {
|
||||||
return DXGI_FORMAT_B8G8R8X8_UNORM_SRGB;
|
return DXGI_FORMAT_B8G8R8X8_UNORM_SRGB;
|
||||||
@@ -2718,6 +2731,7 @@ static bool D3D11_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SDL
|
|||||||
|
|
||||||
renderer->name = D3D11_RenderDriver.name;
|
renderer->name = D3D11_RenderDriver.name;
|
||||||
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ARGB8888);
|
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ARGB8888);
|
||||||
|
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ABGR8888);
|
||||||
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_XRGB8888);
|
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_XRGB8888);
|
||||||
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_XBGR2101010);
|
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_XBGR2101010);
|
||||||
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_RGBA64_FLOAT);
|
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_RGBA64_FLOAT);
|
||||||
|
@@ -298,6 +298,9 @@ static SDL_PixelFormat D3D12_DXGIFormatToSDLPixelFormat(DXGI_FORMAT dxgiFormat)
|
|||||||
case DXGI_FORMAT_B8G8R8A8_UNORM:
|
case DXGI_FORMAT_B8G8R8A8_UNORM:
|
||||||
case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB:
|
case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB:
|
||||||
return SDL_PIXELFORMAT_ARGB8888;
|
return SDL_PIXELFORMAT_ARGB8888;
|
||||||
|
case DXGI_FORMAT_R8G8B8A8_UNORM:
|
||||||
|
case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB:
|
||||||
|
return SDL_PIXELFORMAT_ABGR8888;
|
||||||
case DXGI_FORMAT_B8G8R8X8_UNORM:
|
case DXGI_FORMAT_B8G8R8X8_UNORM:
|
||||||
case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB:
|
case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB:
|
||||||
return SDL_PIXELFORMAT_XRGB8888;
|
return SDL_PIXELFORMAT_XRGB8888;
|
||||||
@@ -322,6 +325,11 @@ static DXGI_FORMAT SDLPixelFormatToDXGITextureFormat(Uint32 format, Uint32 outpu
|
|||||||
return DXGI_FORMAT_B8G8R8A8_UNORM_SRGB;
|
return DXGI_FORMAT_B8G8R8A8_UNORM_SRGB;
|
||||||
}
|
}
|
||||||
return DXGI_FORMAT_B8G8R8A8_UNORM;
|
return DXGI_FORMAT_B8G8R8A8_UNORM;
|
||||||
|
case SDL_PIXELFORMAT_ABGR8888:
|
||||||
|
if (output_colorspace == SDL_COLORSPACE_SRGB_LINEAR) {
|
||||||
|
return DXGI_FORMAT_R8G8B8A8_UNORM_SRGB;
|
||||||
|
}
|
||||||
|
return DXGI_FORMAT_R8G8B8A8_UNORM;
|
||||||
case SDL_PIXELFORMAT_XRGB8888:
|
case SDL_PIXELFORMAT_XRGB8888:
|
||||||
if (output_colorspace == SDL_COLORSPACE_SRGB_LINEAR) {
|
if (output_colorspace == SDL_COLORSPACE_SRGB_LINEAR) {
|
||||||
return DXGI_FORMAT_B8G8R8X8_UNORM_SRGB;
|
return DXGI_FORMAT_B8G8R8X8_UNORM_SRGB;
|
||||||
@@ -352,6 +360,11 @@ static DXGI_FORMAT SDLPixelFormatToDXGIMainResourceViewFormat(Uint32 format, Uin
|
|||||||
return DXGI_FORMAT_B8G8R8A8_UNORM_SRGB;
|
return DXGI_FORMAT_B8G8R8A8_UNORM_SRGB;
|
||||||
}
|
}
|
||||||
return DXGI_FORMAT_B8G8R8A8_UNORM;
|
return DXGI_FORMAT_B8G8R8A8_UNORM;
|
||||||
|
case SDL_PIXELFORMAT_ABGR8888:
|
||||||
|
if (colorspace == SDL_COLORSPACE_SRGB_LINEAR) {
|
||||||
|
return DXGI_FORMAT_R8G8B8A8_UNORM_SRGB;
|
||||||
|
}
|
||||||
|
return DXGI_FORMAT_R8G8B8A8_UNORM;
|
||||||
case SDL_PIXELFORMAT_XRGB8888:
|
case SDL_PIXELFORMAT_XRGB8888:
|
||||||
if (colorspace == SDL_COLORSPACE_SRGB_LINEAR) {
|
if (colorspace == SDL_COLORSPACE_SRGB_LINEAR) {
|
||||||
return DXGI_FORMAT_B8G8R8X8_UNORM_SRGB;
|
return DXGI_FORMAT_B8G8R8X8_UNORM_SRGB;
|
||||||
@@ -3254,6 +3267,7 @@ bool D3D12_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SDL_Proper
|
|||||||
|
|
||||||
renderer->name = D3D12_RenderDriver.name;
|
renderer->name = D3D12_RenderDriver.name;
|
||||||
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ARGB8888);
|
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ARGB8888);
|
||||||
|
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ABGR8888);
|
||||||
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_XRGB8888);
|
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_XRGB8888);
|
||||||
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_XBGR2101010);
|
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_XBGR2101010);
|
||||||
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_RGBA64_FLOAT);
|
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_RGBA64_FLOAT);
|
||||||
|
@@ -1242,10 +1242,10 @@ static bool GPU_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SDL_P
|
|||||||
|
|
||||||
SDL_SetGPUAllowedFramesInFlight(data->device, 1);
|
SDL_SetGPUAllowedFramesInFlight(data->device, 1);
|
||||||
|
|
||||||
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_RGBA32);
|
|
||||||
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_BGRA32);
|
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_BGRA32);
|
||||||
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_RGBX32);
|
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_RGBA32);
|
||||||
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_BGRX32);
|
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_BGRX32);
|
||||||
|
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_RGBX32);
|
||||||
|
|
||||||
SDL_SetNumberProperty(SDL_GetRendererProperties(renderer), SDL_PROP_RENDERER_MAX_TEXTURE_SIZE_NUMBER, 16384);
|
SDL_SetNumberProperty(SDL_GetRendererProperties(renderer), SDL_PROP_RENDERER_MAX_TEXTURE_SIZE_NUMBER, 16384);
|
||||||
|
|
||||||
|
@@ -2099,8 +2099,8 @@ static bool GLES2_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SDL
|
|||||||
renderer->window = window;
|
renderer->window = window;
|
||||||
|
|
||||||
renderer->name = GLES2_RenderDriver.name;
|
renderer->name = GLES2_RenderDriver.name;
|
||||||
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_RGBA32);
|
|
||||||
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_BGRA32);
|
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_BGRA32);
|
||||||
|
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_RGBA32);
|
||||||
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_BGRX32);
|
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_BGRX32);
|
||||||
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_RGBX32);
|
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_RGBX32);
|
||||||
|
|
||||||
|
@@ -398,6 +398,8 @@ static SDL_PixelFormat VULKAN_VkFormatToSDLPixelFormat(VkFormat vkFormat)
|
|||||||
switch (vkFormat) {
|
switch (vkFormat) {
|
||||||
case VK_FORMAT_B8G8R8A8_UNORM:
|
case VK_FORMAT_B8G8R8A8_UNORM:
|
||||||
return SDL_PIXELFORMAT_ARGB8888;
|
return SDL_PIXELFORMAT_ARGB8888;
|
||||||
|
case VK_FORMAT_R8G8B8A8_UNORM:
|
||||||
|
return SDL_PIXELFORMAT_ABGR8888;
|
||||||
case VK_FORMAT_A2R10G10B10_UNORM_PACK32:
|
case VK_FORMAT_A2R10G10B10_UNORM_PACK32:
|
||||||
return SDL_PIXELFORMAT_ABGR2101010;
|
return SDL_PIXELFORMAT_ABGR2101010;
|
||||||
case VK_FORMAT_R16G16B16A16_SFLOAT:
|
case VK_FORMAT_R16G16B16A16_SFLOAT:
|
||||||
@@ -452,6 +454,11 @@ static VkFormat SDLPixelFormatToVkTextureFormat(Uint32 format, Uint32 output_col
|
|||||||
return VK_FORMAT_B8G8R8A8_SRGB;
|
return VK_FORMAT_B8G8R8A8_SRGB;
|
||||||
}
|
}
|
||||||
return VK_FORMAT_B8G8R8A8_UNORM;
|
return VK_FORMAT_B8G8R8A8_UNORM;
|
||||||
|
case SDL_PIXELFORMAT_ABGR8888:
|
||||||
|
if (output_colorspace == SDL_COLORSPACE_SRGB_LINEAR) {
|
||||||
|
return VK_FORMAT_R8G8B8A8_SRGB;
|
||||||
|
}
|
||||||
|
return VK_FORMAT_R8G8B8A8_UNORM;
|
||||||
case SDL_PIXELFORMAT_YUY2:
|
case SDL_PIXELFORMAT_YUY2:
|
||||||
return VK_FORMAT_G8B8G8R8_422_UNORM;
|
return VK_FORMAT_G8B8G8R8_422_UNORM;
|
||||||
case SDL_PIXELFORMAT_UYVY:
|
case SDL_PIXELFORMAT_UYVY:
|
||||||
@@ -4303,6 +4310,7 @@ static bool VULKAN_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SD
|
|||||||
|
|
||||||
renderer->name = VULKAN_RenderDriver.name;
|
renderer->name = VULKAN_RenderDriver.name;
|
||||||
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ARGB8888);
|
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ARGB8888);
|
||||||
|
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ABGR8888);
|
||||||
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ABGR2101010);
|
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ABGR2101010);
|
||||||
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_RGBA64_FLOAT);
|
SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_RGBA64_FLOAT);
|
||||||
SDL_SetNumberProperty(SDL_GetRendererProperties(renderer), SDL_PROP_RENDERER_MAX_TEXTURE_SIZE_NUMBER, 16384);
|
SDL_SetNumberProperty(SDL_GetRendererProperties(renderer), SDL_PROP_RENDERER_MAX_TEXTURE_SIZE_NUMBER, 16384);
|
||||||
|
Reference in New Issue
Block a user