shithub: fnt

Download patch

ref: 443555e5d740523436a4aa6b3317d9c92bb3c8ef
parent: 0c863b1ce85c144b8359b75a631876bed095907c
author: Sigrid Solveig Haflínudóttir <sigrid@ftrv.se>
date: Sun Jul 21 22:01:30 EDT 2024

don't store pixels in FP format, convert as we go

--- a/rast.c
+++ b/rast.c
@@ -335,7 +335,7 @@
 }
 
 static int
-qbzr(SegQ *seg, int ns, int dw, int dh, Sval *p)
+qbzr(SegQ *seg, int ns, int dw, int dh, u8int *p)
 {
 	int ju², j², w, h, i, j, ju, px, py;
 	Sval rju², s₀, s, *c, *c₀x, *c₀y, *cs, zx, zy;
@@ -453,7 +453,8 @@
 				}
 				c = c₀x + 3*j²*j²;
 			}
-			*p++ = s;
+			*p++ = 255 -
+				(s < QBZR_PIX_SCALE/255 ? 0 : (s >= QBZR_PIX_SCALE ? 255 : s/QBZR_PIX_SCALE*255));
 		}
 	}
 	free(ma);
@@ -557,13 +558,11 @@
 	Sval scale, offY;
 	SegQ *s₀, *s, *p;
 	Spt *pts;
-	Sval *fp;
 	u8int *b;
 
 	r = -1;
 	ngs = 0;
 	pts = nil;
-	fp = nil;
 
 	if(g->simple != nil){
 		gs[ngs++] = g;
@@ -664,21 +663,16 @@
 	}
 
 	npx = w*h;
-	fp = malloc(npx*sizeof(*fp));
-	fp[0] = 0;
-	if(qbzr(s₀, s-s₀, w, h, fp) == 0){
-		b = (u8int*)fp;
-		for(i = 0; i < npx; i++)
-			b[i] = 255 - (fp[i] < QBZR_PIX_SCALE/255 ? 0 : (fp[i] >= QBZR_PIX_SCALE ? 255 : fp[i]/QBZR_PIX_SCALE*255));
-		if((b = realloc(fp, npx)) != nil){
-			im->b = b;
-			im->w = w;
-			im->h = h;
-			im->baseline = baseline;
-			fp = nil;
-			r = 0;
-		}
-	}
+	b = malloc(npx);
+	b[0] = 0;
+	if(qbzr(s₀, s-s₀, w, h, b) == 0){
+		im->b = b;
+		im->w = w;
+		im->h = h;
+		im->baseline = baseline;
+		r = 0;
+	}else
+		free(b);
 
 done:
 	for(i = 0; i < ngs; i++){
@@ -686,6 +680,5 @@
 			free(gs[i]);
 	}
 	free(pts);
-	free(fp);
 	return r;
 }