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);