shithub: npe

Download patch

ref: 957fb2007f36fc99d932e1508c4a6795ae30680d
parent: 0408d37559c3683005e812e577fdc86b6f6196ff
author: Sigrid Solveig Haflínudóttir <ftrvxmtrx@gmail.com>
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;