ref: 464cd853b0292237c829d72559bb11035130d1bc
parent: 0e02af1089304c3279367e558262d67c111cd3b7
author: rodri <rgl@antares-labs.eu>
date: Fri Jun 20 10:01:40 EDT 2025
make the internal API public
--- a/obj.c
+++ b/obj.c
@@ -275,14 +275,14 @@
va->verts[va->nvert-1] = v;
}
-static void
-addvert(OBJ *obj, OBJVertex v, int vtype)
+void
+objaddvertex(OBJ *obj, OBJVertex v, int vtype)
{
addvertva(&obj->vertdata[vtype], v);
}
-static void
-addelem(OBJObject *o, OBJElem *e)
+void
+objaddelem(OBJObject *o, OBJElem *e)
{
if(o->lastone == nil){
o->lastone = o->child = e;
@@ -292,8 +292,8 @@
o->lastone = o->lastone->next;
}
-static OBJElem *
-allocelem(int t)
+OBJElem *
+objallocelem(int t)
{
OBJElem *e;
@@ -303,8 +303,8 @@
return e;
}
-static void
-addelemidx(OBJElem *e, int idxtab, int idx)
+void
+objaddelemidx(OBJElem *e, int idxtab, int idx)
{
OBJIndexArray *tab;
@@ -313,8 +313,8 @@
tab->indices[tab->nindex-1] = idx;
}
-static void
-freeelem(OBJElem *e)
+void
+objfreeelem(OBJElem *e)
{
int i;
@@ -323,8 +323,8 @@
free(e);
}
-static OBJObject *
-alloco(char *n)
+OBJObject *
+objallocobject(char *n)
{
OBJObject *o;
@@ -333,8 +333,8 @@
return o;
}
-static void
-freeo(OBJObject *o)
+void
+objfreeobject(OBJObject *o)
{
OBJElem *e, *ne;
@@ -341,13 +341,13 @@
free(o->name);
for(e = o->child; e != nil; e = ne){
ne = e->next;
- freeelem(e);
+ objfreeelem(e);
}
free(o);
}
-static void
-pusho(OBJ *obj, OBJObject *o)
+void
+objpushobject(OBJ *obj, OBJObject *o)
{
OBJObject *op, *prev;
uint h;
@@ -357,7 +357,7 @@
for(op = obj->objtab[h]; op != nil; prev = op, op = op->next)
if(strcmp(op->name, o->name) == 0){
o->next = op->next;
- freeo(op);
+ objfreeobject(op);
break;
}
if(prev == nil){
@@ -367,8 +367,8 @@
prev->next = o;
}
-static OBJObject *
-geto(OBJ *obj, char *n)
+OBJObject *
+objgetobject(OBJ *obj, char *n)
{
OBJObject *o;
uint h;
@@ -380,8 +380,8 @@
return o;
}
-static void
-freetex(OBJTexture *t)
+void
+objfreetexture(OBJTexture *t)
{
if(t == nil)
return;
@@ -389,8 +389,8 @@
freememimage(t->image);
}
-static OBJMaterial *
-allocmt(char *name)
+OBJMaterial *
+objallocmt(char *name)
{
OBJMaterial *m;
@@ -400,18 +400,18 @@
return m;
}
-static void
-freemt(OBJMaterial *m)
+void
+objfreemt(OBJMaterial *m)
{
- freetex(m->norm);
- freetex(m->map_Ks);
- freetex(m->map_Kd);
+ objfreetexture(m->norm);
+ objfreetexture(m->map_Ks);
+ objfreetexture(m->map_Kd);
free(m->name);
free(m);
}
-static OBJMaterlist *
-allocmtl(char *file)
+OBJMaterlist *
+objallocmtl(char *file)
{
OBJMaterlist *ml;
@@ -421,8 +421,8 @@
return ml;
}
-static void
-addmtl(OBJMaterlist *ml, OBJMaterial *m)
+void
+objaddmtl(OBJMaterlist *ml, OBJMaterial *m)
{
OBJMaterial *mp, *prev;
uint h;
@@ -432,7 +432,7 @@
for(mp = ml->mattab[h]; mp != nil; prev = mp, mp = mp->next)
if(strcmp(mp->name, m->name) == 0){
m->next = mp->next;
- freemt(mp);
+ objfreemt(mp);
break;
}
if(prev == nil){
@@ -442,8 +442,8 @@
prev->next = m;
}
-static OBJMaterial *
-getmtl(OBJMaterlist *ml, char *name)
+OBJMaterial *
+objgetmtl(OBJMaterlist *ml, char *name)
{
OBJMaterial *m;
uint h;
@@ -480,7 +480,7 @@
wdir[1] = 0;
}
- ml = allocmtl(file);
+ ml = objallocmtl(file);
m = nil;
curline.file = file;
curline.line = 0;
@@ -498,8 +498,8 @@
error(&curline, "syntax error");
goto error;
}
- m = allocmt(f[1]);
- addmtl(ml, m);
+ m = objallocmt(f[1]);
+ objaddmtl(ml, m);
}else if(strcmp(f[0], "Ka") == 0){
if(nf != 2 && nf != 4){
error(&curline, "syntax error");
@@ -671,7 +671,7 @@
for(i = 0; i < nelem(ml->mattab); i++)
for(m = ml->mattab[i]; m != nil; m = nm){
nm = m->next;
- freemt(m);
+ objfreemt(m);
}
free(ml->filename);
free(ml);
@@ -769,7 +769,7 @@
goto error;
}
}
- addvert(obj, v, vtype);
+ objaddvertex(obj, v, vtype);
break;
case 'o':
p = buf;
@@ -788,10 +788,10 @@
*p++ = c;
}while(c = Bgetc(bin), isobjname(c) && p-buf < sizeof(buf)-1);
*p = 0;
- o = geto(obj, buf);
+ o = objgetobject(obj, buf);
if(o == nil){
- o = alloco(buf);
- pusho(obj, o);
+ o = objallocobject(buf);
+ objpushobject(obj, o);
}
break;
case 'g':
@@ -837,15 +837,15 @@
error(&curline, "not enough vertices");
goto error;
}
- e = allocelem(OBJEPoint);
- addelemidx(e, OBJVGeometric, idx);
+ e = objallocelem(OBJEPoint);
+ objaddelemidx(e, OBJVGeometric, idx);
if(o == nil){
- o = alloco("default");
- pusho(obj, o);
+ o = objallocobject("default");
+ objpushobject(obj, o);
}
if(m != nil)
e->mtl = m;
- addelem(o, e);
+ objaddelem(o, e);
}
break;
case 'l':
@@ -884,8 +884,8 @@
error(&curline, "not enough vertices");
goto error;
}
- e = allocelem(OBJELine);
- addelemidx(e, OBJVGeometric, idx);
+ e = objallocelem(OBJELine);
+ objaddelemidx(e, OBJVGeometric, idx);
Line2:
idx = 0;
sign = 0;
@@ -898,7 +898,7 @@
goto Line2;
}
if(c != '-' && !isdigit(c)){
- freeelem(e);
+ objfreeelem(e);
error(&curline, "unexpected character '%c'", c);
goto error;
}
@@ -906,7 +906,7 @@
sign = 1;
c = Bgetc(bin);
if(!isdigit(c)){
- freeelem(e);
+ objfreeelem(e);
error(&curline, "unexpected character '%c'", c);
goto error;
}
@@ -917,26 +917,26 @@
Bungetc(bin);
idx = sign ? obj->vertdata[OBJVGeometric].nvert-idx : idx-1;
if(idx+1 > obj->vertdata[OBJVGeometric].nvert){
- freeelem(e);
+ objfreeelem(e);
error(&curline, "not enough vertices");
goto error;
}
- addelemidx(e, OBJVGeometric, idx);
+ objaddelemidx(e, OBJVGeometric, idx);
if(o == nil){
- o = alloco("default");
- pusho(obj, o);
+ o = objallocobject("default");
+ objpushobject(obj, o);
}
if(m != nil)
e->mtl = m;
- addelem(o, e);
+ objaddelem(o, e);
}
break;
case 'f':
- e = allocelem(OBJEFace);
+ e = objallocelem(OBJEFace);
idxtab = 0;
c = Bgetc(bin);
if(!isspace(c)){
- freeelem(e);
+ objfreeelem(e);
error(&curline, "syntax error");
goto error;
}
@@ -954,7 +954,7 @@
}
if(c == '/'){
if(++idxtab >= OBJNVERT){
- freeelem(e);
+ objfreeelem(e);
error(&curline, "unknown vertex type '%d'", idxtab);
goto error;
}
@@ -961,7 +961,7 @@
continue;
}
if(c != '-' && !isdigit(c)){
- freeelem(e);
+ objfreeelem(e);
error(&curline, "unexpected character '%c'", c);
goto error;
}
@@ -969,7 +969,7 @@
sign = 1;
c = Bgetc(bin);
if(!isdigit(c)){
- freeelem(e);
+ objfreeelem(e);
error(&curline, "unexpected character '%c'", c);
goto error;
}
@@ -980,19 +980,19 @@
Bungetc(bin);
idx = sign ? obj->vertdata[idxtab].nvert-idx : idx-1;
if(idx+1 > obj->vertdata[idxtab].nvert){
- freeelem(e);
+ objfreeelem(e);
error(&curline, "not enough vertices");
goto error;
}
- addelemidx(e, idxtab, idx);
+ objaddelemidx(e, idxtab, idx);
}
if(o == nil){
- o = alloco("default");
- pusho(obj, o);
+ o = objallocobject("default");
+ objpushobject(obj, o);
}
if(m != nil)
e->mtl = m;
- addelem(o, e);
+ objaddelem(o, e);
break;
case 'm':
case 'u':
@@ -1019,7 +1019,7 @@
*p++ = c;
}while(c = Bgetc(bin), ismtlname(c) && p-buf < sizeof(buf)-1);
*p = 0;
- if(obj->materials == nil || (m = getmtl(obj->materials, buf)) == nil)
+ if(obj->materials == nil || (m = objgetmtl(obj->materials, buf)) == nil)
fprint(2, "warning: no material '%s' found\n", buf);
}else{
error(&curline, "syntax error");
@@ -1067,7 +1067,7 @@
for(i = 0; i < nelem(obj->objtab); i++)
for(o = obj->objtab[i]; o != nil; o = no){
no = o->next;
- freeo(o);
+ objfreeobject(o);
}
free(obj);
}
--- a/obj.h
+++ b/obj.h
@@ -134,6 +134,21 @@
OBJMaterlist *materials;
};
+void objaddvertex(OBJ*, OBJVertex, int);
+void objaddelem(OBJObject*, OBJElem*);
+OBJElem *objallocelem(int);
+void objaddelemidx(OBJElem*, int, int);
+void objfreeelem(OBJElem*);
+OBJObject *objallocobject(char*);
+void objfreeobject(OBJObject*);
+void objpushobject(OBJ*, OBJObject*);
+OBJObject *objgetobject(OBJ*, char*);
+void objfreetexture(OBJTexture*);
+OBJMaterial *objallocmt(char*);
+void objfreemt(OBJMaterial*);
+OBJMaterlist *objallocmtl(char*);
+void objaddmtl(OBJMaterlist*, OBJMaterial*);
+OBJMaterial *objgetmtl(OBJMaterlist*, char*);
OBJ *objparse(char*);
void objfree(OBJ*);
OBJMaterlist *objmtlparse(char*);
--
⑨