shithub: libgraphics

Download patch

ref: 6f9fea1fa77a4dbbc9cecff4d7961e74ef1bc959
parent: db7337728f11c548d1cec193bddc1ca674bc7396
author: rodri <rgl@antares-labs.eu>
date: Sun Mar 16 15:04:45 EDT 2025

fix the namespace

now internal functions are prefixed with '_'. it won't
completely avoid collisions with user-defined
functions, but it should buy us more time.

--- a/alloc.c
+++ b/alloc.c
@@ -8,7 +8,7 @@
 #include "internal.h"
 
 void *
-emalloc(ulong n)
+_emalloc(ulong n)
 {
 	void *p;
 
@@ -20,7 +20,7 @@
 }
 
 void *
-erealloc(void *p, ulong n)
+_erealloc(void *p, ulong n)
 {
 	void *np;
 
@@ -38,7 +38,7 @@
 }
 
 Memimage *
-eallocmemimage(Rectangle r, ulong chan)
+_eallocmemimage(Rectangle r, ulong chan)
 {
 	Memimage *i;
 
--- a/camera.c
+++ b/camera.c
@@ -127,7 +127,7 @@
 {
 	Camera *c;
 
-	c = emalloc(sizeof *c);
+	c = _emalloc(sizeof *c);
 	memset(c, 0, sizeof *c);
 	c->rendopts = RODepth;
 	return c;
@@ -242,11 +242,11 @@
 
 	fbctl = c->view->fbctl;
 
-	job = emalloc(sizeof *job);
+	job = _emalloc(sizeof *job);
 	memset(job, 0, sizeof *job);
 	job->rctl = c->rctl;
 	job->fb = fbctl->getbb(fbctl);
-	job->camera = emalloc(sizeof *c);
+	job->camera = _emalloc(sizeof *c);
 	*job->camera = *c;
 	job->scene = dupscene(c->scene);	/* take a snapshot */	
 	job->shaders = s;
--- a/clip.c
+++ b/clip.c
@@ -27,7 +27,7 @@
 addvert(Polygon *p, Vertex v)
 {
 	if(++p->n > p->cap)
-		p->v = erealloc(p->v, (p->cap = p->n)*sizeof(*p->v));
+		p->v = _erealloc(p->v, (p->cap = p->n)*sizeof(*p->v));
 	p->v[p->n-1] = v;
 	return p->n;
 }
@@ -38,7 +38,7 @@
 	int i;
 
 	for(i = 0; i < p->n; i++)
-		delvattrs(&p->v[i]);
+		_delvattrs(&p->v[i]);
 	p->n = 0;
 }
 
@@ -58,7 +58,7 @@
  * 	- https://github.com/aap/librw/blob/14dab85dcae6f3762fb2b1eda4d58d8e67541330/tools/playground/tl_tests.cpp#L522
  */
 int
-clipprimitive(Primitive *p, Primitive *cp)
+_clipprimitive(Primitive *p, Primitive *cp)
 {
 	/* signed distance from each clipping plane */
 	static double sdm[6][4] = {
@@ -102,12 +102,12 @@
 			perc = d0/(d0 - d1);
 
 			memset(&v, 0, sizeof v);
-			lerpvertex(&v, v0, v1, perc);
+			_lerpvertex(&v, v0, v1, perc);
 			addvert(Vout, v);
 
 			if(sd1[j] >= 0){
 allin:
-				addvert(Vout, dupvertex(v1));
+				addvert(Vout, _dupvertex(v1));
 			}
 		}
 		cleanpoly(Vin);
@@ -120,8 +120,8 @@
 	else switch(p->type){
 	case PLine:
 		cp[0] = *p;
-		cp[0].v[0] = dupvertex(&Vout->v[0]);
-		cp[0].v[1] = eqpt3(Vout->v[0].p, Vout->v[1].p)? dupvertex(&Vout->v[2]): dupvertex(&Vout->v[1]);
+		cp[0].v[0] = _dupvertex(&Vout->v[0]);
+		cp[0].v[1] = eqpt3(Vout->v[0].p, Vout->v[1].p)? _dupvertex(&Vout->v[2]): _dupvertex(&Vout->v[1]);
 		cleanpoly(Vout);
 		np = 1;
 		break;
@@ -134,9 +134,9 @@
 			 * to avoid complications during rasterization.
 			 */
 			cp[np] = *p;
-			cp[np].v[0] = i < Vout->n-2-1? dupvertex(&Vout->v[0]): Vout->v[0];
+			cp[np].v[0] = i < Vout->n-2-1? _dupvertex(&Vout->v[0]): Vout->v[0];
 			cp[np].v[1] = Vout->v[i+1];
-			cp[np].v[2] = i < Vout->n-2-1? dupvertex(&Vout->v[i+2]): Vout->v[i+2];
+			cp[np].v[2] = i < Vout->n-2-1? _dupvertex(&Vout->v[i+2]): Vout->v[i+2];
 		}
 		break;
 	}
@@ -193,14 +193,14 @@
 
 	Δp = subpt(Pt(v0->p.x, v0->p.y), *p0);
 	perc = len == 0? 0: hypot(Δp.x, Δp.y)/len;
-	lerpvertex(&v[0], v0, v1, perc);
+	_lerpvertex(&v[0], v0, v1, perc);
 
 	Δp = subpt(Pt(v0->p.x, v0->p.y), *p1);
 	perc = len == 0? 0: hypot(Δp.x, Δp.y)/len;
-	lerpvertex(&v[1], v0, v1, perc);
+	_lerpvertex(&v[1], v0, v1, perc);
 
-	delvattrs(v0);
-	delvattrs(v1);
+	_delvattrs(v0);
+	_delvattrs(v1);
 	*v0 = v[0];
 	*v1 = v[1];
 }
@@ -209,7 +209,7 @@
  * Cohen-Sutherland rectangle-line clipping
  */
 int
-rectclipline(Rectangle r, Point *p0, Point *p1, Vertex *v0, Vertex *v1)
+_rectclipline(Rectangle r, Point *p0, Point *p1, Vertex *v0, Vertex *v1)
 {
 	int code0, code1;
 	int Δx, Δy;
--- a/fb.c
+++ b/fb.c
@@ -29,7 +29,7 @@
 		dst[2] = D == H? D: E;
 		dst[3] = H == F? F: E;
 	}else
-		memsetl(dst, E, 4);
+		_memsetl(dst, E, 4);
 }
 
 static void
@@ -66,7 +66,7 @@
 		dst[7] = (D == H && E != I) || (H == F && E != G)? H: E;
 		dst[8] = H == F? F: E;
 	}else
-		memsetl(dst, E, 9);
+		_memsetl(dst, E, 9);
 }
 
 //static void
@@ -78,7 +78,7 @@
 static void
 ident_filter(ulong *dst, Raster *fb, Point sp, ulong len)
 {
-	memsetl(dst, getpixel(fb, sp), len);
+	_memsetl(dst, getpixel(fb, sp), len);
 }
 
 /* convert a float raster to a greyscale color one */
@@ -151,7 +151,7 @@
 	r = fb->rasters;
 	while(r->next != nil)
 		r = r->next;
-	r->next = allocraster(name, fb->r, chan);
+	r->next = _allocraster(name, fb->r, chan);
 }
 
 static Raster *
@@ -180,7 +180,7 @@
 	ulong *blk;
 
 	filterfn = nil;
-	blk = emalloc(scale.x*scale.y*4);
+	blk = _emalloc(scale.x*scale.y*4);
 	blkr = Rect(0,0,scale.x,scale.y);
 	tmp = allocimage(display, dst->r, RGBA32, 0, 0);
 	if(tmp == nil)
@@ -227,7 +227,7 @@
 
 	r2 = nil;
 	if(r->chan == FLOAT32){
-		r2 = allocraster(nil, r->r, COLOR32);
+		r2 = _allocraster(nil, r->r, COLOR32);
 		rasterconvF2C(r2, r);
 		r = r2;
 	}
@@ -234,7 +234,7 @@
 
 	/* this means the raster is a color one, so duplicate it */
 	if(r2 == nil){
-		r2 = allocraster(nil, r->r, COLOR32);
+		r2 = _allocraster(nil, r->r, COLOR32);
 		memmove(r2->data, r->data, Dx(r->r)*Dy(r->r)*4);
 		r = r2;
 	}
@@ -243,7 +243,7 @@
 	if(scale.x > 1 || scale.y > 1){
 		upscaledraw(r, dst, off, scale, ctl->upfilter);
 		qunlock(ctl);
-		freeraster(r2);
+		_freeraster(r2);
 		return;
 	}
 
@@ -260,12 +260,12 @@
 		/* remove offset to get the actual rect within the framebuffer */
 		sr = rectsubpt(sr, off);
 		for(; sr.min.y < sr.max.y; sr.min.y++, dr.min.y++, dr.max.y++)
-			loadimage(tmp, rectaddpt(dr, dst->r.min), rasterbyteaddr(r, sr.min), Dx(dr)*4);
+			loadimage(tmp, rectaddpt(dr, dst->r.min), _rasterbyteaddr(r, sr.min), Dx(dr)*4);
 		draw(dst, rectaddpt(tmp->r, dst->r.min), tmp, nil, tmp->r.min);
 		freeimage(tmp);
 	}
 	qunlock(ctl);
-	freeraster(r2);
+	_freeraster(r2);
 }
 
 static void
@@ -278,7 +278,7 @@
 	ulong *blk;
 
 	filterfn = nil;
-	blk = emalloc(scale.x*scale.y*4);
+	blk = _emalloc(scale.x*scale.y*4);
 	blkr = Rect(0,0,scale.x,scale.y);
 	tmp = allocmemimage(dst->r, RGBA32);
 	if(tmp == nil)
@@ -326,7 +326,7 @@
 
 	r2 = nil;
 	if(r->chan == FLOAT32){
-		r2 = allocraster(nil, r->r, COLOR32);
+		r2 = _allocraster(nil, r->r, COLOR32);
 		rasterconvF2C(r2, r);
 		r = r2;
 	}
@@ -333,7 +333,7 @@
 
 	/* this means the raster is a color one, so duplicate it */
 	if(r2 == nil){
-		r2 = allocraster(nil, r->r, COLOR32);
+		r2 = _allocraster(nil, r->r, COLOR32);
 		memmove(r2->data, r->data, Dx(r->r)*Dy(r->r)*4);
 		r = r2;
 	}
@@ -342,7 +342,7 @@
 	if(scale.x > 1 || scale.y > 1){
 		upscalememdraw(r, dst, off, scale, ctl->upfilter);
 		qunlock(ctl);
-		freeraster(r2);
+		_freeraster(r2);
 		return;
 	}
 
@@ -368,12 +368,12 @@
 		/* remove offset to get the actual rect within the framebuffer */
 		sr = rectsubpt(sr, off);
 		for(; sr.min.y < sr.max.y; sr.min.y++, dr.min.y++, dr.max.y++)
-			loadmemimage(tmp, rectaddpt(dr, dst->r.min), rasterbyteaddr(r, sr.min), Dx(dr)*4);
+			loadmemimage(tmp, rectaddpt(dr, dst->r.min), _rasterbyteaddr(r, sr.min), Dx(dr)*4);
 		memimagedraw(dst, rectaddpt(tmp->r, dst->r.min), tmp, tmp->r.min, nil, ZP, S);
 		freememimage(tmp);
 	}
 	qunlock(ctl);
-	freeraster(r2);
+	_freeraster(r2);
 }
 
 static void
@@ -405,11 +405,11 @@
 	resetAbuf(&fb->abuf);
 
 	r = fb->rasters;		/* color buffer */
-	clearraster(r, 0);
+	_clearraster(r, 0);
 	r = r->next;			/* z-buffer */
-	fclearraster(r, Inf(-1));
+	_fclearraster(r, Inf(-1));
 	while((r = r->next) != nil)
-		clearraster(r, 0);	/* every other raster */
+		_clearraster(r, 0);	/* every other raster */
 }
 
 static Framebuf *
@@ -446,98 +446,98 @@
 }
 
 Raster *
-allocraster(char *name, Rectangle rr, ulong chan)
+_allocraster(char *name, Rectangle rr, ulong chan)
 {
 	Raster *r;
 
 	assert(chan <= FLOAT32);
 
-	r = emalloc(sizeof *r);
+	r = _emalloc(sizeof *r);
 	memset(r, 0, sizeof *r);
 	if(name != nil && (r->name = strdup(name)) == nil)
 		sysfatal("strdup: %r");
 	r->chan = chan;
 	r->r = rr;
-	r->data = emalloc(Dx(rr)*Dy(rr)*sizeof(*r->data));
+	r->data = _emalloc(Dx(rr)*Dy(rr)*sizeof(*r->data));
 	return r;
 }
 
 void
-clearraster(Raster *r, ulong v)
+_clearraster(Raster *r, ulong v)
 {
-	memsetl(r->data, v, Dx(r->r)*Dy(r->r));
+	_memsetl(r->data, v, Dx(r->r)*Dy(r->r));
 }
 
 void
-fclearraster(Raster *r, float v)
+_fclearraster(Raster *r, float v)
 {
-	memsetf(r->data, v, Dx(r->r)*Dy(r->r));
+	_memsetf(r->data, v, Dx(r->r)*Dy(r->r));
 }
 
 uchar *
-rasterbyteaddr(Raster *r, Point p)
+_rasterbyteaddr(Raster *r, Point p)
 {
 	return (uchar*)&r->data[p.y*Dx(r->r) + p.x];
 }
 
 void
-rasterput(Raster *r, Point p, void *v)
+_rasterput(Raster *r, Point p, void *v)
 {
 	switch(r->chan){
 	case COLOR32:
-		*(ulong*)rasterbyteaddr(r, p) = *(ulong*)v;
+		*(ulong*)_rasterbyteaddr(r, p) = *(ulong*)v;
 		break;
 	case FLOAT32:
-		*(float*)rasterbyteaddr(r, p) = *(float*)v;
+		*(float*)_rasterbyteaddr(r, p) = *(float*)v;
 		break;
 	}
 }
 
 void
-rasterget(Raster *r, Point p, void *v)
+_rasterget(Raster *r, Point p, void *v)
 {
 	switch(r->chan){
 	case COLOR32:
-		*(ulong*)v = *(ulong*)rasterbyteaddr(r, p);
+		*(ulong*)v = *(ulong*)_rasterbyteaddr(r, p);
 		break;
 	case FLOAT32:
-		*(float*)v = *(float*)rasterbyteaddr(r, p);
+		*(float*)v = *(float*)_rasterbyteaddr(r, p);
 		break;
 	}
 }
 
 void
-rasterputcolor(Raster *r, Point p, ulong c)
+_rasterputcolor(Raster *r, Point p, ulong c)
 {
-	rasterput(r, p, &c);
+	_rasterput(r, p, &c);
 }
 
 ulong
-rastergetcolor(Raster *r, Point p)
+_rastergetcolor(Raster *r, Point p)
 {
 	ulong c;
 
-	rasterget(r, p, &c);
+	_rasterget(r, p, &c);
 	return c;
 }
 
 void
-rasterputfloat(Raster *r, Point p, float v)
+_rasterputfloat(Raster *r, Point p, float v)
 {
-	rasterput(r, p, &v);
+	_rasterput(r, p, &v);
 }
 
 float
-rastergetfloat(Raster *r, Point p)
+_rastergetfloat(Raster *r, Point p)
 {
 	float v;
 
-	rasterget(r, p, &v);
+	_rasterget(r, p, &v);
 	return v;
 }
 
 void
-freeraster(Raster *r)
+_freeraster(Raster *r)
 {
 	if(r == nil)
 		return;
@@ -547,14 +547,14 @@
 }
 
 Framebuf *
-mkfb(Rectangle r)
+_mkfb(Rectangle r)
 {
 	Framebuf *fb;
 
-	fb = emalloc(sizeof *fb);
+	fb = _emalloc(sizeof *fb);
 	memset(fb, 0, sizeof *fb);
-	fb->rasters = allocraster(nil, r, COLOR32);
-	fb->rasters->next = allocraster("z-buffer", r, FLOAT32);
+	fb->rasters = _allocraster(nil, r, COLOR32);
+	fb->rasters->next = _allocraster("z-buffer", r, FLOAT32);
 	fb->r = r;
 	fb->createraster = fb_createraster;
 	fb->fetchraster = fb_fetchraster;
@@ -562,26 +562,26 @@
 }
 
 void
-rmfb(Framebuf *fb)
+_rmfb(Framebuf *fb)
 {
 	Raster *r, *nr;
 
 	for(r = fb->rasters; r != nil; r = nr){
 		nr = r->next;
-		freeraster(r);
+		_freeraster(r);
 	}
 	free(fb);
 }
 
 Framebufctl *
-mkfbctl(Rectangle r)
+_mkfbctl(Rectangle r)
 {
 	Framebufctl *fc;
 
-	fc = emalloc(sizeof *fc);
+	fc = _emalloc(sizeof *fc);
 	memset(fc, 0, sizeof *fc);
-	fc->fb[0] = mkfb(r);
-	fc->fb[1] = mkfb(r);
+	fc->fb[0] = _mkfb(r);
+	fc->fb[1] = _mkfb(r);
 	fc->draw = framebufctl_draw;
 	fc->memdraw = framebufctl_memdraw;
 	fc->swap = framebufctl_swap;
@@ -595,9 +595,9 @@
 }
 
 void
-rmfbctl(Framebufctl *fc)
+_rmfbctl(Framebufctl *fc)
 {
-	rmfb(fc->fb[1]);
-	rmfb(fc->fb[0]);
+	_rmfb(fc->fb[1]);
+	_rmfb(fc->fb[0]);
 	free(fc);
 }
--- a/internal.h
+++ b/internal.h
@@ -46,48 +46,48 @@
 };
 
 /* alloc */
-void *emalloc(ulong);
-void *erealloc(void*, ulong);
-Memimage *eallocmemimage(Rectangle, ulong);
+void *_emalloc(ulong);
+void *_erealloc(void*, ulong);
+Memimage *_eallocmemimage(Rectangle, ulong);
 
 /* fb */
-Raster *allocraster(char*, Rectangle, ulong);
-void clearraster(Raster*, ulong);
-void fclearraster(Raster*, float);
-uchar *rasterbyteaddr(Raster*, Point);
-void rasterput(Raster*, Point, void*);
-void rasterget(Raster*, Point, void*);
-void rasterputcolor(Raster*, Point, ulong);
-ulong rastergetcolor(Raster*, Point);
-void rasterputfloat(Raster*, Point, float);
-float rastergetfloat(Raster*, Point);
-void freeraster(Raster*);
-Framebuf *mkfb(Rectangle);
-void rmfb(Framebuf*);
-Framebufctl *mkfbctl(Rectangle);
-void rmfbctl(Framebufctl*);
+Raster *_allocraster(char*, Rectangle, ulong);
+void _clearraster(Raster*, ulong);
+void _fclearraster(Raster*, float);
+uchar *_rasterbyteaddr(Raster*, Point);
+void _rasterput(Raster*, Point, void*);
+void _rasterget(Raster*, Point, void*);
+void _rasterputcolor(Raster*, Point, ulong);
+ulong _rastergetcolor(Raster*, Point);
+void _rasterputfloat(Raster*, Point, float);
+float _rastergetfloat(Raster*, Point);
+void _freeraster(Raster*);
+Framebuf *_mkfb(Rectangle);
+void _rmfb(Framebuf*);
+Framebufctl *_mkfbctl(Rectangle);
+void _rmfbctl(Framebufctl*);
 
 /* vertex */
-Vertex dupvertex(Vertex*);
-void lerpvertex(Vertex*, Vertex*, Vertex*, double);
-void berpvertex(Vertex*, Vertex*, Vertex*, Vertex*, Point3);
-void delvattrs(Vertex*);
-void fprintvattrs(int, Vertex*);
-void addvattr(Vertexattrs*, char*, int, void*);
-Vertexattr *getvattr(Vertexattrs*, char*);
+Vertex _dupvertex(Vertex*);
+void _lerpvertex(Vertex*, Vertex*, Vertex*, double);
+void _berpvertex(Vertex*, Vertex*, Vertex*, Vertex*, Point3);
+void _delvattrs(Vertex*);
+void _fprintvattrs(int, Vertex*);
+void _addvattr(Vertexattrs*, char*, int, void*);
+Vertexattr *_getvattr(Vertexattrs*, char*);
 
 /* clip */
-int clipprimitive(Primitive*, Primitive*);
-int rectclipline(Rectangle, Point*, Point*, Vertex*, Vertex*);
+int _clipprimitive(Primitive*, Primitive*);
+int _rectclipline(Rectangle, Point*, Point*, Vertex*, Vertex*);
 
 /* util */
-void memsetf(void*, float, usize);
-void memsetl(void*, ulong, usize);
+void _memsetf(void*, float, usize);
+void _memsetl(void*, ulong, usize);
 
-#define getpixel(fb, p)		rastergetcolor(fb, p)
-#define putpixel(fb, p, c)	rasterputcolor(fb, p, c)
-#define getdepth(fb, p)		rastergetfloat(fb, p)
-#define putdepth(fb, p, z)	rasterputfloat(fb, p, z)
+#define getpixel(fb, p)		_rastergetcolor(fb, p)
+#define putpixel(fb, p, c)	_rasterputcolor(fb, p, c)
+#define getdepth(fb, p)		_rastergetfloat(fb, p)
+#define putdepth(fb, p, z)	_rasterputfloat(fb, p, z)
 
 /* void SWAP(type t, type *a, type *b) */
 #define SWAP(t, a, b) {t tmp; tmp = *(a); *(a) = *(b); *(b) = tmp;}
--- a/marshal.c
+++ b/marshal.c
@@ -90,7 +90,7 @@
 {
 	IArray *a;
 
-	a = emalloc(sizeof *a);
+	a = _emalloc(sizeof *a);
 	memset(a, 0, sizeof *a);
 	a->itemsize = is;
 	return a;
@@ -110,7 +110,7 @@
 	}
 
 	idx = a->nitems;
-	a->items = erealloc(a->items, ++a->nitems * a->itemsize);
+	a->items = _erealloc(a->items, ++a->nitems * a->itemsize);
 	p = a->items;
 	p += idx*a->itemsize;
 	memmove(p, i, a->itemsize);
@@ -153,7 +153,7 @@
 {
 	Mtltab *t;
 
-	t = emalloc(sizeof *t);
+	t = _emalloc(sizeof *t);
 	memset(t, 0, sizeof *t);
 	return t;
 }
@@ -174,7 +174,7 @@
 	Mtlentry *nm, *mp, *prev;
 	uint h;
 
-	nm = emalloc(sizeof *nm);
+	nm = _emalloc(sizeof *nm);
 	memset(nm, 0, sizeof *nm);
 	nm->Material = *m;
 	nm->next = nil;
--- a/render.c
+++ b/render.c
@@ -10,25 +10,25 @@
 static Vertexattr *
 sparams_getuniform(Shaderparams *sp, char *id)
 {
-	return getvattr(sp->su->stab, id);
+	return _getvattr(sp->su->stab, id);
 }
 
 void
 setuniform(Shadertab *st, char *id, int type, void *val)
 {
-	addvattr(st, id, type, val);
+	_addvattr(st, id, type, val);
 }
 
 static Vertexattr *
 sparams_getattr(Shaderparams *sp, char *id)
 {
-	return getvattr(sp->v, id);
+	return _getvattr(sp->v, id);
 }
 
 static void
 sparams_setattr(Shaderparams *sp, char *id, int type, void *val)
 {
-	addvattr(sp->v, id, type, val);
+	_addvattr(sp->v, id, type, val);
 }
 
 static void
@@ -50,10 +50,10 @@
 	switch(r->chan){
 	case COLOR32:
 		c = col2ul(*(Color*)v);
-		rasterput(r, sp->p, &c);
+		_rasterput(r, sp->p, &c);
 		break;
 	case FLOAT32:
-		rasterput(r, sp->p, v);
+		_rasterput(r, sp->p, v);
 		break;
 	}
 }
@@ -105,7 +105,7 @@
 	stk = &buf->stk[p.y*Dx(fb->r) + p.x];
 	if(stk->nitems == stk->size){
 		stk->size += 8;
-		stk->items = erealloc(stk->items, stk->size*sizeof(*stk->items));
+		stk->items = _erealloc(stk->items, stk->size*sizeof(*stk->items));
 		memset(&stk->items[stk->size-8], 0, 8*sizeof(*stk->items));
 	}
 	stk->nitems++;
@@ -122,7 +122,7 @@
 		stk->active++;
 		stk->p = p;
 		qlock(buf);
-		buf->act = erealloc(buf->act, ++buf->nact*sizeof(*buf->act));
+		buf->act = _erealloc(buf->act, ++buf->nact*sizeof(*buf->act));
 		buf->act[buf->nact-1] = stk;
 		qunlock(buf);
 	}
@@ -224,13 +224,13 @@
 			task->clipr->min = minpt(task->clipr->min, p);
 			task->clipr->max = maxpt(task->clipr->max, addpt(p, Pt(1,1)));
 		}
-		delvattrs(fsp.v);
+		_delvattrs(fsp.v);
 		break;
 	case PLine:
 		p0 = Pt(prim->v[0].p.x, prim->v[0].p.y);
 		p1 = Pt(prim->v[1].p.x, prim->v[1].p.y);
 		/* clip it against our wr */
-		if(rectclipline(task->wr, &p0, &p1, &prim->v[0], &prim->v[1]) < 0)
+		if(_rectclipline(task->wr, &p0, &p1, &prim->v[0], &prim->v[1]) < 0)
 			break;
 
 		steep = 0;
@@ -271,7 +271,7 @@
 
 			/* perspective-correct attribute interpolation  */
 			perc *= prim->v[0].p.w * pcz;
-			lerpvertex(fsp.v, &prim->v[0], &prim->v[1], perc);
+			_lerpvertex(fsp.v, &prim->v[0], &prim->v[1], perc);
 
 			fsp.p = p;
 			c = params->stab->fs(&fsp);
@@ -300,7 +300,7 @@
 				e -= 2*dp.x;
 			}
 		}
-		delvattrs(fsp.v);
+		_delvattrs(fsp.v);
 		break;
 	case PTriangle:
 		t.p0 = Pt2(prim->v[0].p.x, prim->v[0].p.y, 1);
@@ -325,7 +325,7 @@
 			bc = modulapt3(bc, Vec3(prim->v[0].p.w*pcz,
 						prim->v[1].p.w*pcz,
 						prim->v[2].p.w*pcz));
-			berpvertex(fsp.v, &prim->v[0], &prim->v[1], &prim->v[2], bc);
+			_berpvertex(fsp.v, &prim->v[0], &prim->v[1], &prim->v[2], bc);
 
 			fsp.p = p;
 			c = params->stab->fs(&fsp);
@@ -346,7 +346,7 @@
 				task->clipr->max = maxpt(task->clipr->max, addpt(p, Pt(1,1)));
 			}
 		}
-		delvattrs(fsp.v);
+		_delvattrs(fsp.v);
 		break;
 	default: sysfatal("alien primitive detected");
 	}
@@ -406,7 +406,7 @@
 		rasterize(task);
 
 		for(i = 0; i < task->p.type+1; i++)
-			delvattrs(&task->p.v[i]);
+			_delvattrs(&task->p.v[i]);
 		free(params);
 		free(task);
 	}
@@ -429,10 +429,10 @@
 	tp = arg;
 	threadsetname("tiler %d", tp->id);
 
-	cp = emalloc(sizeof(*cp)*16);
+	cp = _emalloc(sizeof(*cp)*16);
 	taskchans = tp->taskchans;
 	nproc = tp->nproc;
-	wr = emalloc(nproc*sizeof(Rectangle));
+	wr = _emalloc(nproc*sizeof(Rectangle));
 
 	memset(&vsp, 0, sizeof vsp);
 	vsp.getuniform = sparams_getuniform;
@@ -453,7 +453,7 @@
 			if(decref(params->job) < 1){
 				params->job->ref = nproc;
 				for(i = 0; i < nproc; i++){
-					task = emalloc(sizeof *task);
+					task = _emalloc(sizeof *task);
 					memset(task, 0, sizeof *task);
 					task->params = params;
 					sendp(taskchans[i], task);
@@ -498,17 +498,17 @@
 
 				for(i = 0; i < nproc; i++)
 					if(rectXrect(bbox, wr[i])){
-						newparams = emalloc(sizeof *newparams);
+						newparams = _emalloc(sizeof *newparams);
 						*newparams = *params;
-						task = emalloc(sizeof *task);
+						task = _emalloc(sizeof *task);
 						task->params = newparams;
 						task->clipr = &params->job->cliprects[i];
 						task->p = *p;
-						task->p.v[0] = dupvertex(&p->v[0]);
+						task->p.v[0] = _dupvertex(&p->v[0]);
 						sendp(taskchans[i], task);
 						break;
 					}
-				delvattrs(&p->v[0]);
+				_delvattrs(&p->v[0]);
 				break;
 			case PLine:
 				for(i = 0; i < 2; i++){
@@ -522,7 +522,7 @@
 				}
 
 				if(!isvisible(p->v[0].p) || !isvisible(p->v[1].p)){
-					np = clipprimitive(p, cp);
+					np = _clipprimitive(p, cp);
 					p = cp;
 				}
 
@@ -541,19 +541,19 @@
 
 				for(i = 0; i < nproc; i++)
 					if(rectXrect(bbox, wr[i])){
-						newparams = emalloc(sizeof *newparams);
+						newparams = _emalloc(sizeof *newparams);
 						*newparams = *params;
-						task = emalloc(sizeof *task);
+						task = _emalloc(sizeof *task);
 						task->params = newparams;
 						task->wr = wr[i];
 						task->clipr = &params->job->cliprects[i];
 						task->p = *p;
-						task->p.v[0] = dupvertex(&p->v[0]);
-						task->p.v[1] = dupvertex(&p->v[1]);
+						task->p.v[0] = _dupvertex(&p->v[0]);
+						task->p.v[1] = _dupvertex(&p->v[1]);
 						sendp(taskchans[i], task);
 					}
-				delvattrs(&p->v[0]);
-				delvattrs(&p->v[1]);
+				_delvattrs(&p->v[0]);
+				_delvattrs(&p->v[1]);
 				break;
 			case PTriangle:
 				for(i = 0; i < 3; i++){
@@ -568,7 +568,7 @@
 				}
 
 				if(!isvisible(p->v[0].p) || !isvisible(p->v[1].p) || !isvisible(p->v[2].p)){
-					np = clipprimitive(p, cp);
+					np = _clipprimitive(p, cp);
 					p = cp;
 				}
 
@@ -594,23 +594,23 @@
 
 					for(i = 0; i < nproc; i++)
 						if(rectXrect(bbox, wr[i])){
-							newparams = emalloc(sizeof *newparams);
+							newparams = _emalloc(sizeof *newparams);
 							*newparams = *params;
-							task = emalloc(sizeof *task);
+							task = _emalloc(sizeof *task);
 							task->params = newparams;
 							task->wr = bbox;
 							rectclip(&task->wr, wr[i]);
 							task->clipr = &params->job->cliprects[i];
 							task->p = *p;
-							task->p.v[0] = dupvertex(&p->v[0]);
-							task->p.v[1] = dupvertex(&p->v[1]);
-							task->p.v[2] = dupvertex(&p->v[2]);
+							task->p.v[0] = _dupvertex(&p->v[0]);
+							task->p.v[1] = _dupvertex(&p->v[1]);
+							task->p.v[2] = _dupvertex(&p->v[2]);
 							sendp(taskchans[i], task);
 						}
 skiptri:
-					delvattrs(&p->v[0]);
-					delvattrs(&p->v[1]);
-					delvattrs(&p->v[2]);
+					_delvattrs(&p->v[0]);
+					_delvattrs(&p->v[1]);
+					_delvattrs(&p->v[2]);
 				}
 				break;
 			default: sysfatal("alien primitive detected");
@@ -642,11 +642,11 @@
 	if(nproc > 2)
 		nproc /= 2;
 
-	paramsout = emalloc(nproc*sizeof(*paramsout));
-	taskchans = emalloc(nproc*sizeof(*taskchans));
+	paramsout = _emalloc(nproc*sizeof(*paramsout));
+	taskchans = _emalloc(nproc*sizeof(*taskchans));
 	for(i = 0; i < nproc; i++){
 		paramsout[i] = chancreate(sizeof(SUparams*), 256);
-		tp = emalloc(sizeof *tp);
+		tp = _emalloc(sizeof *tp);
 		tp->id = i;
 		tp->paramsc = paramsout[i];
 		tp->taskchans = taskchans;
@@ -654,7 +654,7 @@
 		proccreate(tiler, tp, mainstacksize);
 	}
 	for(i = 0; i < nproc; i++){
-		rp = emalloc(sizeof *rp);
+		rp = _emalloc(sizeof *rp);
 		rp->id = i;
 		rp->taskc = taskchans[i] = chancreate(sizeof(Rastertask*), 512);
 		proccreate(rasterizer, rp, mainstacksize);
@@ -668,8 +668,8 @@
 		/* prof: initialize timing slots for the next stages */
 		if(params->job->rctl->doprof && params->job->times.Tn == nil){
 			assert(params->job->times.Rn == nil);
-			params->job->times.Tn = emalloc(nproc*sizeof(Rendertime));
-			params->job->times.Rn = emalloc(nproc*sizeof(Rendertime));
+			params->job->times.Tn = _emalloc(nproc*sizeof(Rendertime));
+			params->job->times.Rn = _emalloc(nproc*sizeof(Rendertime));
 			memset(params->job->times.Tn, 0, nproc*sizeof(Rendertime));
 			memset(params->job->times.Rn, 0, nproc*sizeof(Rendertime));
 		}
@@ -685,7 +685,7 @@
 		}
 
 		if(params->job->cliprects == nil){
-			params->job->cliprects = emalloc(nproc*sizeof(Rectangle));
+			params->job->cliprects = _emalloc(nproc*sizeof(Rectangle));
 			params->job->ncliprects = nproc;
 			for(i = 0; i < nproc; i++){
 				params->job->cliprects[i].min = Pt(-1,-1);
@@ -706,7 +706,7 @@
 		}
 
 		for(i = 0; i < nworkers; i++){
-			newparams = emalloc(sizeof *newparams);
+			newparams = _emalloc(sizeof *newparams);
 			*newparams = *params;
 			newparams->eb = eb + i*stride;
 			newparams->ee = i == nworkers-1? ee: newparams->eb + stride;
@@ -732,7 +732,7 @@
 	rctl = arg;
 	lastid = 0;
 
-	ep = emalloc(sizeof *ep);
+	ep = _emalloc(sizeof *ep);
 	ep->rctl = rctl;
 	ep->paramsc = chancreate(sizeof(SUparams*), 256);
 	proccreate(entityproc, ep, mainstacksize);
@@ -749,12 +749,12 @@
 
 		/* 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));
+			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));
 		}
 
 		for(ent = sc->ents.next; ent != &sc->ents; ent = ent->next){
-			params = emalloc(sizeof *params);
+			params = _emalloc(sizeof *params);
 			memset(params, 0, sizeof *params);
 			params->fb = job->fb;
 			params->stab = job->shaders;
@@ -764,7 +764,7 @@
 			sendp(ep->paramsc, params);
 		}
 		/* mark end of job */
-		params = emalloc(sizeof *params);
+		params = _emalloc(sizeof *params);
 		memset(params, 0, sizeof *params);
 		params->job = job;
 		sendp(ep->paramsc, params);
@@ -785,7 +785,7 @@
 		nproc = 1;
 	free(nprocs);
 
-	r = emalloc(sizeof *r);
+	r = _emalloc(sizeof *r);
 	memset(r, 0, sizeof *r);
 	r->jobq = chancreate(sizeof(Renderjob*), 8);
 	r->nprocs = nproc;
--- a/scene.c
+++ b/scene.c
@@ -17,7 +17,7 @@
 		return nil;
 	}
 
-	mtl = emalloc(sizeof *mtl);
+	mtl = _emalloc(sizeof *mtl);
 	memset(mtl, 0, sizeof *mtl);
 	mtl->name = strdup(name);
 	mtl->ambient = Pt3(1,1,1,1);
@@ -38,7 +38,7 @@
 static int
 model_addprim(Model *m, Primitive p)
 {
-	m->prims = erealloc(m->prims, ++m->nprims*sizeof(*m->prims));
+	m->prims = _erealloc(m->prims, ++m->nprims*sizeof(*m->prims));
 	m->prims[m->nprims-1] = p;
 	return m->nprims-1;
 }
@@ -46,7 +46,7 @@
 static int
 model_addmaterial(Model *m, Material mtl)
 {
-	m->materials = erealloc(m->materials, ++m->nmaterials*sizeof(*m->materials));
+	m->materials = _erealloc(m->materials, ++m->nmaterials*sizeof(*m->materials));
 	m->materials[m->nmaterials-1] = mtl;
 	return m->nmaterials-1;
 }
@@ -67,7 +67,7 @@
 {
 	Model *m;
 
-	m = emalloc(sizeof *m);
+	m = _emalloc(sizeof *m);
 	memset(m, 0, sizeof *m);
 	m->addprim = model_addprim;
 	m->addmaterial = model_addmaterial;
@@ -87,7 +87,7 @@
 	nm = newmodel();
 	if(m->nmaterials > 0){
 		nm->nmaterials = m->nmaterials;
-		nm->materials = emalloc(nm->nmaterials*sizeof(*nm->materials));
+		nm->materials = _emalloc(nm->nmaterials*sizeof(*nm->materials));
 		for(i = 0; i < m->nmaterials; i++){
 			nm->materials[i] = m->materials[i];
 			nm->materials[i].diffusemap = duptexture(m->materials[i].diffusemap);
@@ -100,7 +100,7 @@
 	}
 	if(m->nprims > 0){
 		nm->nprims = m->nprims;
-		nm->prims = emalloc(nm->nprims*sizeof(*nm->prims));
+		nm->prims = _emalloc(nm->nprims*sizeof(*nm->prims));
 		for(i = 0; i < m->nprims; i++){
 			nm->prims[i] = m->prims[i];
 			if(nm->nmaterials > 0 && m->prims[i].mtl != nil)
@@ -128,7 +128,7 @@
 {
 	Entity *e;
 
-	e = emalloc(sizeof *e);
+	e = _emalloc(sizeof *e);
 	e->p = Pt3(0,0,0,1);
 	e->bx = Vec3(1,0,0);
 	e->by = Vec3(0,1,0);
@@ -212,7 +212,7 @@
 {
 	Scene *s;
 
-	s = emalloc(sizeof *s);
+	s = _emalloc(sizeof *s);
 	s->name = name == nil? nil: strdup(name);
 	s->ents.prev = s->ents.next = &s->ents;
 	s->nents = 0;
--- a/texture.c
+++ b/texture.c
@@ -41,7 +41,7 @@
 }
 
 static Color
-_memreadcolor(Texture *t, Point sp)
+memreadcolor(Texture *t, Point sp)
 {
 	Color c;
 	uchar cbuf[4];
@@ -86,7 +86,7 @@
 Color
 neartexsampler(Texture *t, Point2 uv)
 {
-	return _memreadcolor(t, uv2tp(uv, t));
+	return memreadcolor(t, uv2tp(uv, t));
 }
 
 /*
@@ -112,8 +112,8 @@
 		r.min.y--;
 		r.max.y--;
 	}
-	c1 = lerp3(_memreadcolor(t, r.min), _memreadcolor(t, Pt(r.max.x, r.min.y)), 0.5);
-	c2 = lerp3(_memreadcolor(t, Pt(r.min.x, r.max.y)), _memreadcolor(t, r.max), 0.5);
+	c1 = lerp3(memreadcolor(t, r.min), memreadcolor(t, Pt(r.max.x, r.min.y)), 0.5);
+	c2 = lerp3(memreadcolor(t, Pt(r.min.x, r.max.y)), memreadcolor(t, r.max), 0.5);
 	return lerp3(c1, c2, 0.5);
 }
 
@@ -128,7 +128,7 @@
 {
 	Texture *t;
 
-	t = emalloc(sizeof *t);
+	t = _emalloc(sizeof *t);
 	memset(t, 0, sizeof *t);
 	t->image = i;
 	t->type = type;
@@ -163,7 +163,7 @@
 	char **p;
 	int fd;
 
-	cm = emalloc(sizeof *cm);
+	cm = _emalloc(sizeof *cm);
 	memset(cm, 0, sizeof *cm);
 	
 	for(p = paths; p < paths+6; p++){
@@ -189,7 +189,7 @@
 	if(cm == nil)
 		return nil;
 
-	ncm = emalloc(sizeof *ncm);
+	ncm = _emalloc(sizeof *ncm);
 	memset(ncm, 0, sizeof *ncm);
 	if(cm->name != nil)
 		ncm->name = strdup(cm->name);
--- a/util.c
+++ b/util.c
@@ -94,7 +94,7 @@
 }
 
 void
-memsetf(void *dp, float v, usize len)
+_memsetf(void *dp, float v, usize len)
 {
 	float *p;
 
@@ -104,7 +104,7 @@
 }
 
 void
-memsetl(void *dp, ulong v, usize len)
+_memsetl(void *dp, ulong v, usize len)
 {
 	ulong *p;
 
@@ -118,7 +118,7 @@
 {
 	Memimage *i;
 
-	i = eallocmemimage(UR, RGBA32);
+	i = _eallocmemimage(UR, RGBA32);
 	i->flags |= Frepl;
 	i->clipr = Rect(-1e6, -1e6, 1e6, 1e6);
 	memfillcolor(i, c);
--- a/vertex.c
+++ b/vertex.c
@@ -8,7 +8,7 @@
 #include "internal.h"
 
 static void
-_addvattr(Vertexattrs *v, Vertexattr *va)
+addvattr(Vertexattrs *v, Vertexattr *va)
 {
 	int i;
 
@@ -19,7 +19,7 @@
 			v->attrs[i] = *va;
 			return;
 		}
-	v->attrs = erealloc(v->attrs, ++v->nattrs*sizeof(*va));
+	v->attrs = _erealloc(v->attrs, ++v->nattrs*sizeof(*va));
 	v->attrs[v->nattrs-1] = *va;
 }
 
@@ -29,11 +29,11 @@
 	int i;
 
 	for(i = 0; i < s->nattrs; i++)
-		_addvattr(d, &s->attrs[i]);
+		addvattr(d, &s->attrs[i]);
 }
 
 Vertex
-dupvertex(Vertex *v)
+_dupvertex(Vertex *v)
 {
 	Vertex nv;
 
@@ -48,7 +48,7 @@
  * linear attribute interpolation
  */
 void
-lerpvertex(Vertex *v, Vertex *v0, Vertex *v1, double t)
+_lerpvertex(Vertex *v, Vertex *v0, Vertex *v1, double t)
 {
 	Vertexattr va;
 	int i;
@@ -65,7 +65,7 @@
 			va.p = lerp3(v0->attrs[i].p, v1->attrs[i].p, t);
 		else
 			va.n = flerp(v0->attrs[i].n, v1->attrs[i].n, t);
-		_addvattr(v, &va);
+		addvattr(v, &va);
 	}
 }
 
@@ -73,7 +73,7 @@
  * barycentric attribute interpolation
  */
 void
-berpvertex(Vertex *v, Vertex *v0, Vertex *v1, Vertex *v2, Point3 bc)
+_berpvertex(Vertex *v, Vertex *v0, Vertex *v1, Vertex *v2, Point3 bc)
 {
 	Vertexattr va;
 	int i;
@@ -90,12 +90,12 @@
 			va.p = berp3(v0->attrs[i].p, v1->attrs[i].p, v2->attrs[i].p, bc);
 		else
 			va.n = fberp(v0->attrs[i].n, v1->attrs[i].n, v2->attrs[i].n, bc);
-		_addvattr(v, &va);
+		addvattr(v, &va);
 	}
 }
 
 void
-addvattr(Vertexattrs *v, char *id, int type, void *val)
+_addvattr(Vertexattrs *v, char *id, int type, void *val)
 {
 	Vertexattr va;
 
@@ -106,11 +106,11 @@
 	case VANumber: va.n = *(double*)val; break;
 	default: sysfatal("unknown vertex attribute type '%d'", type);
 	}
-	_addvattr(v, &va);
+	addvattr(v, &va);
 }
 
 Vertexattr *
-getvattr(Vertexattrs *v, char *id)
+_getvattr(Vertexattrs *v, char *id)
 {
 	int i;
 
@@ -121,7 +121,7 @@
 }
 
 void
-delvattrs(Vertex *v)
+_delvattrs(Vertex *v)
 {
 	free(v->attrs);
 	v->attrs= nil;
@@ -129,7 +129,7 @@
 }
 
 void
-fprintvattrs(int fd, Vertex *v)
+_fprintvattrs(int fd, Vertex *v)
 {
 	int i;
 
--- a/viewport.c
+++ b/viewport.c
@@ -88,11 +88,11 @@
 		return nil;
 	}
 
-	v = emalloc(sizeof *v);
+	v = _emalloc(sizeof *v);
 	v->p = Pt2(0,0,1);
 	v->bx = Vec2(1,0);
 	v->by = Vec2(0,1);
-	v->fbctl = mkfbctl(r);
+	v->fbctl = _mkfbctl(r);
 	v->r = r;
 	v->draw = viewport_draw;
 	v->memdraw = viewport_memdraw;
@@ -111,6 +111,6 @@
 {
 	if(v == nil)
 		return;
-	rmfbctl(v->fbctl);
+	_rmfbctl(v->fbctl);
 	free(v);
 }
--