shithub: libgraphics

Download patch

ref: d8dbd40be9434f806474fab1fe9de2710adb5017
parent: 0bd16830c02c4f3567f9fbf6e788c21a97cc1b39
author: rodri <rgl@antares-labs.eu>
date: Mon Apr 14 16:12:51 EDT 2025

render: fix a point rastering bug. add an initAbuf() procedure

--- a/render.c
+++ b/render.c
@@ -105,6 +105,16 @@
 }
 
 static void
+initAbuf(Framebuf *fb)
+{
+	if(fb->abuf.stk != nil)
+		return;
+
+	fb->abuf.stk = _emalloc(Dx(fb->r)*Dy(fb->r)*sizeof(Astk));
+	memset(fb->abuf.stk, 0, Dx(fb->r)*Dy(fb->r)*sizeof(Astk));
+}
+
+static void
 pushtoAbuf(Framebuf *fb, Point p, Color c, float z)
 {
 	Abuf *buf;
@@ -519,8 +529,9 @@
 		(*rasterfn[task->p.type])(task);
 
 		_delvattrs(&v);
-		for(i = 0; i < task->p.type+1; i++)
-			_delvattrs(&task->p.v[i]);
+		if(task->p.type != PPoint)
+			for(i = 0; i < task->p.type+1; i++)
+				_delvattrs(&task->p.v[i]);
 		free(params);
 		free(task);
 	}
@@ -867,11 +878,8 @@
 			continue;
 		}
 
-		/* initialize the A-buffer */
-		if((job->camera->rendopts & ROAbuff) && job->fb->abuf.stk == nil){
-			job->fb->abuf.stk = _emalloc(Dx(job->fb->r)*Dy(job->fb->r)*sizeof(Astk));
-			memset(job->fb->abuf.stk, 0, Dx(job->fb->r)*Dy(job->fb->r)*sizeof(Astk));
-		}
+		if((job->camera->rendopts & ROAbuff))
+			initAbuf(job->fb);
 
 		for(ent = sc->ents.next; ent != &sc->ents; ent = ent->next){
 			params = _emalloc(sizeof *params);