Select the best pixel formats for use in the software renderer
parent
712457ec28
commit
4ee4e49e49
|
@ -1011,6 +1011,100 @@ SW_DestroyRenderer(SDL_Renderer * renderer)
|
||||||
SDL_free(renderer);
|
SDL_free(renderer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
SW_SelectBestFormats(SDL_Renderer *renderer, Uint32 format)
|
||||||
|
{
|
||||||
|
/* Prefer the format used by the framebuffer by default. */
|
||||||
|
renderer->info.texture_formats[renderer->info.num_texture_formats++] = format;
|
||||||
|
|
||||||
|
switch (format) {
|
||||||
|
case SDL_PIXELFORMAT_XRGB4444:
|
||||||
|
renderer->info.texture_formats[renderer->info.num_texture_formats++] = SDL_PIXELFORMAT_ARGB4444;
|
||||||
|
break;
|
||||||
|
case SDL_PIXELFORMAT_XBGR4444:
|
||||||
|
renderer->info.texture_formats[renderer->info.num_texture_formats++] = SDL_PIXELFORMAT_ABGR4444;
|
||||||
|
break;
|
||||||
|
case SDL_PIXELFORMAT_ARGB4444:
|
||||||
|
renderer->info.texture_formats[renderer->info.num_texture_formats++] = SDL_PIXELFORMAT_XRGB4444;
|
||||||
|
break;
|
||||||
|
case SDL_PIXELFORMAT_ABGR4444:
|
||||||
|
renderer->info.texture_formats[renderer->info.num_texture_formats++] = SDL_PIXELFORMAT_XBGR4444;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SDL_PIXELFORMAT_XRGB1555:
|
||||||
|
renderer->info.texture_formats[renderer->info.num_texture_formats++] = SDL_PIXELFORMAT_ARGB1555;
|
||||||
|
break;
|
||||||
|
case SDL_PIXELFORMAT_XBGR1555:
|
||||||
|
renderer->info.texture_formats[renderer->info.num_texture_formats++] = SDL_PIXELFORMAT_ABGR1555;
|
||||||
|
break;
|
||||||
|
case SDL_PIXELFORMAT_ARGB1555:
|
||||||
|
renderer->info.texture_formats[renderer->info.num_texture_formats++] = SDL_PIXELFORMAT_XRGB1555;
|
||||||
|
break;
|
||||||
|
case SDL_PIXELFORMAT_ABGR1555:
|
||||||
|
renderer->info.texture_formats[renderer->info.num_texture_formats++] = SDL_PIXELFORMAT_XBGR1555;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SDL_PIXELFORMAT_XRGB8888:
|
||||||
|
renderer->info.texture_formats[renderer->info.num_texture_formats++] = SDL_PIXELFORMAT_ARGB8888;
|
||||||
|
break;
|
||||||
|
case SDL_PIXELFORMAT_RGBX8888:
|
||||||
|
renderer->info.texture_formats[renderer->info.num_texture_formats++] = SDL_PIXELFORMAT_RGBA8888;
|
||||||
|
break;
|
||||||
|
case SDL_PIXELFORMAT_XBGR8888:
|
||||||
|
renderer->info.texture_formats[renderer->info.num_texture_formats++] = SDL_PIXELFORMAT_ABGR8888;
|
||||||
|
break;
|
||||||
|
case SDL_PIXELFORMAT_BGRX8888:
|
||||||
|
renderer->info.texture_formats[renderer->info.num_texture_formats++] = SDL_PIXELFORMAT_BGRA8888;
|
||||||
|
break;
|
||||||
|
case SDL_PIXELFORMAT_ARGB8888:
|
||||||
|
renderer->info.texture_formats[renderer->info.num_texture_formats++] = SDL_PIXELFORMAT_XRGB8888;
|
||||||
|
break;
|
||||||
|
case SDL_PIXELFORMAT_RGBA8888:
|
||||||
|
renderer->info.texture_formats[renderer->info.num_texture_formats++] = SDL_PIXELFORMAT_RGBX8888;
|
||||||
|
break;
|
||||||
|
case SDL_PIXELFORMAT_ABGR8888:
|
||||||
|
renderer->info.texture_formats[renderer->info.num_texture_formats++] = SDL_PIXELFORMAT_XBGR8888;
|
||||||
|
break;
|
||||||
|
case SDL_PIXELFORMAT_BGRA8888:
|
||||||
|
renderer->info.texture_formats[renderer->info.num_texture_formats++] = SDL_PIXELFORMAT_BGRX8888;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Ensure that we always have a SDL_PACKEDLAYOUT_8888 format. Having a matching component order increases the
|
||||||
|
* chances of getting a fast path for blitting.
|
||||||
|
*/
|
||||||
|
if (SDL_ISPIXELFORMAT_PACKED(format)) {
|
||||||
|
if (SDL_PIXELLAYOUT(format) != SDL_PACKEDLAYOUT_8888) {
|
||||||
|
switch (SDL_PIXELORDER(format)) {
|
||||||
|
case SDL_PACKEDORDER_BGRX:
|
||||||
|
case SDL_PACKEDORDER_BGRA:
|
||||||
|
renderer->info.texture_formats[renderer->info.num_texture_formats++] = SDL_PIXELFORMAT_BGRX8888;
|
||||||
|
renderer->info.texture_formats[renderer->info.num_texture_formats++] = SDL_PIXELFORMAT_BGRA8888;
|
||||||
|
break;
|
||||||
|
case SDL_PACKEDORDER_RGBX:
|
||||||
|
case SDL_PACKEDORDER_RGBA:
|
||||||
|
renderer->info.texture_formats[renderer->info.num_texture_formats++] = SDL_PIXELFORMAT_RGBX8888;
|
||||||
|
renderer->info.texture_formats[renderer->info.num_texture_formats++] = SDL_PIXELFORMAT_RGBA8888;
|
||||||
|
break;
|
||||||
|
case SDL_PACKEDORDER_XBGR:
|
||||||
|
case SDL_PACKEDORDER_ABGR:
|
||||||
|
renderer->info.texture_formats[renderer->info.num_texture_formats++] = SDL_PIXELFORMAT_XBGR8888;
|
||||||
|
renderer->info.texture_formats[renderer->info.num_texture_formats++] = SDL_PIXELFORMAT_ABGR8888;
|
||||||
|
break;
|
||||||
|
case SDL_PACKEDORDER_XRGB:
|
||||||
|
case SDL_PACKEDORDER_ARGB:
|
||||||
|
default:
|
||||||
|
renderer->info.texture_formats[renderer->info.num_texture_formats++] = SDL_PIXELFORMAT_XRGB8888;
|
||||||
|
renderer->info.texture_formats[renderer->info.num_texture_formats++] = SDL_PIXELFORMAT_ARGB8888;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
renderer->info.texture_formats[renderer->info.num_texture_formats++] = SDL_PIXELFORMAT_XRGB8888;
|
||||||
|
renderer->info.texture_formats[renderer->info.num_texture_formats++] = SDL_PIXELFORMAT_ARGB8888;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
SDL_Renderer *
|
SDL_Renderer *
|
||||||
SW_CreateRendererForSurface(SDL_Surface * surface)
|
SW_CreateRendererForSurface(SDL_Surface * surface)
|
||||||
{
|
{
|
||||||
|
@ -1061,6 +1155,8 @@ SW_CreateRendererForSurface(SDL_Surface * surface)
|
||||||
renderer->info = SW_RenderDriver.info;
|
renderer->info = SW_RenderDriver.info;
|
||||||
renderer->driverdata = data;
|
renderer->driverdata = data;
|
||||||
|
|
||||||
|
SW_SelectBestFormats(renderer, surface->format->format);
|
||||||
|
|
||||||
SW_ActivateRenderer(renderer);
|
SW_ActivateRenderer(renderer);
|
||||||
|
|
||||||
return renderer;
|
return renderer;
|
||||||
|
@ -1103,16 +1199,10 @@ SDL_RenderDriver SW_RenderDriver = {
|
||||||
{
|
{
|
||||||
"software",
|
"software",
|
||||||
SDL_RENDERER_SOFTWARE | SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_TARGETTEXTURE,
|
SDL_RENDERER_SOFTWARE | SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_TARGETTEXTURE,
|
||||||
8,
|
0,
|
||||||
{
|
{
|
||||||
SDL_PIXELFORMAT_ARGB8888,
|
/* formats filled in later */
|
||||||
SDL_PIXELFORMAT_ABGR8888,
|
SDL_PIXELFORMAT_UNKNOWN
|
||||||
SDL_PIXELFORMAT_RGBA8888,
|
|
||||||
SDL_PIXELFORMAT_BGRA8888,
|
|
||||||
SDL_PIXELFORMAT_RGB888,
|
|
||||||
SDL_PIXELFORMAT_BGR888,
|
|
||||||
SDL_PIXELFORMAT_RGB565,
|
|
||||||
SDL_PIXELFORMAT_RGB555
|
|
||||||
},
|
},
|
||||||
0,
|
0,
|
||||||
0}
|
0}
|
||||||
|
|
Loading…
Reference in New Issue