ref: 0cfec2702bfc37f0d5c0ca5f72659563711037ad
parent: 9ad38e532689b5ed8581f0f57c7f9ba458c10119
author: Jacob Moody <[email protected]>
date: Sun Aug 27 16:14:15 EDT 2023
sdl2: add SDL_PIXELFORMAT_ABGR8888
--- a/include/npe/SDL2/SDL.h
+++ b/include/npe/SDL2/SDL.h
@@ -196,6 +196,7 @@
SDL_PIXELFORMAT_XRGB8888 = 0x16161804,
SDL_PIXELFORMAT_INDEX8 = 0x13000801,
SDL_PIXELFORMAT_RGB24 = 0x17101803,
+ SDL_PIXELFORMAT_ABGR8888 = 0x16762004,
SDL_PIXELFORMAT_RGB888 = SDL_PIXELFORMAT_XRGB8888,
/* shit no one cares about */
--- a/libnpe_sdl2/sdl2.c
+++ b/libnpe_sdl2/sdl2.c
@@ -29,6 +29,10 @@
.format = SDL_PIXELFORMAT_XRGB8888,
};
+static SDL_PixelFormat abgr8888 = {
+ .format = SDL_PIXELFORMAT_ABGR8888,
+};
+
static SDL_PixelFormat rgb24 = {
.format = SDL_PIXELFORMAT_RGB24,
};
@@ -217,14 +221,25 @@
SDL_CreateTexture(SDL_Renderer *, Uint32 format, int, int w, int h)
{
SDL_Texture *t;
+ int dformat;
- if(format != SDL_PIXELFORMAT_ARGB8888 && format != SDL_PIXELFORMAT_XRGB8888){
- werrstr("SDL_CreateTexture: only SDL_PIXELFORMAT_*RGB8888 is supported");
+ switch(format){
+ case SDL_PIXELFORMAT_ARGB8888:
+ dformat = ARGB32;
+ break;
+ case SDL_PIXELFORMAT_XRGB8888:
+ dformat = XRGB32;
+ break;
+ case SDL_PIXELFORMAT_ABGR8888:
+ dformat = ABGR32;
+ break;
+ default:
+ werrstr("SDL_CreateTexture: format is not supported");
goto err;
}
if((t = malloc(sizeof(*t))) == nil)
goto err;
- if((t->m = allocmemimage(Rect(0, 0, w, h), format == SDL_PIXELFORMAT_ARGB8888 ? ARGB32 : XRGB32)) == nil){
+ if((t->m = allocmemimage(Rect(0, 0, w, h), dformat)) == nil){
free(t);
goto err;
}
@@ -430,6 +445,8 @@
f = &xrgb8888;
else if(fmt == SDL_PIXELFORMAT_RGB24)
f = &rgb24;
+ else if(fmt == SDL_PIXELFORMAT_ABGR8888)
+ f = &abgr8888;
else{
werrstr("SDL_CreateRGBSurfaceWithFormat: FIXME format %8ux not implemented", fmt);
return nil;
@@ -453,6 +470,7 @@
switch(dst->format->format){
case SDL_PIXELFORMAT_XRGB8888:
case SDL_PIXELFORMAT_ARGB8888:
+ case SDL_PIXELFORMAT_ABGR8888:
p = (Uint32*)dst->pixels;
for(i = 0; i < dst->n / sizeof(*p); i++)
p[i] = color;
@@ -951,6 +969,14 @@
n *= 4;
m = back;
break;
+ case SDL_PIXELFORMAT_ABGR8888:
+ n *= 4;
+ r2 = Rect(0,0,Dx(r),Dy(r));
+ if((m = allocmemimage(r2, ABGR32)) == nil)
+ return -1;
+ memfillcolor(m, DBlack);
+ memimagedraw(m, r2, back, r.min, nil, ZP, S);
+ break;
case SDL_PIXELFORMAT_RGB24:
n *= 3;
r2 = Rect(0,0,Dx(r),Dy(r));
@@ -960,7 +986,7 @@
memimagedraw(m, r2, back, r.min, nil, ZP, S);
break;
default:
- werrstr("SDL_RenderReadPixels: FIXME non-*rgb{8888,24}");
+ werrstr("SDL_RenderReadPixels: format not supported");
return -1;
}