ref: 957fb2007f36fc99d932e1508c4a6795ae30680d
parent: 0408d37559c3683005e812e577fdc86b6f6196ff
author: Sigrid Solveig Haflínudóttir <[email protected]>
date: Fri Mar 19 12:15:15 EDT 2021
sdl2: move image scaler outside
--- a/libnpe_sdl2/_sdl.h
+++ b/libnpe_sdl2/_sdl.h
@@ -24,4 +24,5 @@
extern struct npe_sdl npe_sdl;
-int npe_init_input(void);
+int npe_sdl_init_input(void);
+void *npe_sdl_scale(u32int *src, int iw, int ih, u32int *dst, int ow, int oh);
--- /dev/null
+++ b/libnpe_sdl2/scale.c
@@ -1,0 +1,27 @@
+#include "_sdl.h"
+
+void *
+npe_sdl_scale(u32int *src, int iw, int ih, u32int *dst, int ow, int oh)
+{
+ int i, j, m, n;
+ u32int *d;
+
+ if(iw == ow && ih == oh)
+ return src;
+
+ d = dst;
+ n = ow/iw;
+ for(; ih > 0 && oh > 0; ih--){
+ for(i = j = 0; i < iw; i++, src++)
+ for(m = 0; m < n && j < ow; m++, j++)
+ *dst++ = *src;
+ oh--;
+ for(m = 1; m < n && oh > 0; m++){
+ memmove(dst, dst-j, j*4);
+ dst += j;
+ oh--;
+ }
+ }
+
+ return d;
+}
--- a/libnpe_sdl2/sdl2.c
+++ b/libnpe_sdl2/sdl2.c
@@ -71,7 +71,7 @@
goto err;
if(initdraw(nil, nil, argv0) < 0)
goto err;
- if(npe_init_input() != 0)
+ if(npe_sdl_init_input() != 0)
goto err;
return 0;
@@ -526,32 +526,6 @@
npe_nsleep((uvlong)ms*1000000ULL);
}
-static void *
-resize(u32int *src, int iw, int ih, u32int *dst, int ow, int oh)
-{
- int i, j, m, n;
- u32int *d;
-
- if(iw == ow && ih == oh)
- return src;
-
- d = dst;
- n = ow/iw;
- for(; ih > 0 && oh > 0; ih--){
- for(i = j = 0; i < iw; i++, src++)
- for(m = 0; m < n && j < ow; m++, j++)
- *dst++ = *src;
- oh--;
- for(m = 1; m < n && oh > 0; m++){
- memmove(dst, dst-j, j*4);
- dst += j;
- oh--;
- }
- }
-
- return d;
-}
-
int
SDL_RenderCopy(SDL_Renderer *, SDL_Texture *t, SDL_Rect *sre, SDL_Rect *dre)
{
@@ -581,7 +555,7 @@
}
if(dre == nil && (Dx(sr) != logiw || Dy(sr) != logih))
- resize((u32int*)byteaddr(t, ZP), Dx(sr), Dy(sr), (u32int*)byteaddr(back, ZP), logiw, logih);
+ npe_sdl_scale((u32int*)byteaddr(t, ZP), Dx(sr), Dy(sr), (u32int*)byteaddr(back, ZP), logiw, logih);
else
memimagedraw(back, dr, t, sr.min, nil, ZP, S);
@@ -610,7 +584,7 @@
return;
}
if(npe_sdl.fullredraw || front == nil){
- rb = resize((u32int*)byteaddr(back, ZP), Dx(back->r), Dy(back->r), b, physw, physh);
+ rb = npe_sdl_scale((u32int*)byteaddr(back, ZP), Dx(back->r), Dy(back->r), b, physw, physh);
if(front == nil && (front = allocimage(display, r, XRGB32, 0, DNofill)) == nil){
fprint(2, "SDL_RenderPresent: %r\n");
return;