summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--graphics.h8
-rw-r--r--render.c12
-rw-r--r--util.c15
3 files changed, 26 insertions, 9 deletions
diff --git a/graphics.h b/graphics.h
index 047334d..8d62e76 100644
--- a/graphics.h
+++ b/graphics.h
@@ -233,9 +233,9 @@ struct SUparams
struct Shadertab
{
char *name;
- Point3 (*vshader)(Shaderparams*); /* vertex shader */
- Color (*fshader)(Shaderparams*); /* fragment shader */
- Vertexattrs; /* uniforms */
+ Point3 (*vs)(Shaderparams*); /* vertex shader */
+ Color (*fs)(Shaderparams*); /* fragment shader */
+ Vertexattrs; /* uniforms */
};
struct Rendertime
@@ -446,6 +446,8 @@ Point3 modulapt3(Point3, Point3);
Point3 minpt3(Point3, Point3);
Point3 maxpt3(Point3, Point3);
int eqpt3(Point3, Point3);
+Quaternion qsandwich(Quaternion, Quaternion);
+Point3 qsandwichpt3(Quaternion, Point3);
Memimage *rgba(ulong);
Memimage *dupmemimage(Memimage*);
diff --git a/render.c b/render.c
index 672b4b5..400593d 100644
--- a/render.c
+++ b/render.c
@@ -207,7 +207,7 @@ rasterize(Rastertask *task)
fsp.v = &prim->v[0];
fsp.p = p;
- c = params->stab->fshader(&fsp);
+ c = params->stab->fs(&fsp);
if(c.a == 0) /* discard non-colors */
break;
if(ropts & RODepth)
@@ -273,7 +273,7 @@ rasterize(Rastertask *task)
lerpvertex(fsp.v, &prim->v[0], &prim->v[1], perc);
fsp.p = p;
- c = params->stab->fshader(&fsp);
+ c = params->stab->fs(&fsp);
if(c.a == 0) /* discard non-colors */
goto discard;
if(ropts & RODepth)
@@ -327,7 +327,7 @@ discard:
berpvertex(fsp.v, &prim->v[0], &prim->v[1], &prim->v[2], bc);
fsp.p = p;
- c = params->stab->fshader(&fsp);
+ c = params->stab->fs(&fsp);
if(c.a == 0) /* discard non-colors */
continue;
if(ropts & RODepth)
@@ -482,7 +482,7 @@ tiler(void *arg)
vsp.v = &p->v[0];
vsp.idx = 0;
- p->v[0].p = params->stab->vshader(&vsp);
+ p->v[0].p = params->stab->vs(&vsp);
if(!isvisible(p->v[0].p))
break;
@@ -517,7 +517,7 @@ tiler(void *arg)
vsp.v = &p->v[i];
vsp.idx = i;
- p->v[i].p = params->stab->vshader(&vsp);
+ p->v[i].p = params->stab->vs(&vsp);
}
if(!isvisible(p->v[0].p) || !isvisible(p->v[1].p)){
@@ -563,7 +563,7 @@ tiler(void *arg)
vsp.v = &p->v[i];
vsp.idx = i;
- p->v[i].p = params->stab->vshader(&vsp);
+ p->v[i].p = params->stab->vs(&vsp);
}
if(!isvisible(p->v[0].p) || !isvisible(p->v[1].p) || !isvisible(p->v[2].p)){
diff --git a/util.c b/util.c
index ff76ab9..8aeaaf2 100644
--- a/util.c
+++ b/util.c
@@ -91,6 +91,21 @@ eqpt3(Point3 a, Point3 b)
return vec3len(subpt3(a, b)) < ε2;
}
+Quaternion
+qsandwich(Quaternion q, Quaternion p)
+{
+ return mulq(mulq(q, p), invq(q));
+}
+
+Point3
+qsandwichpt3(Quaternion q, Point3 p)
+{
+ Quaternion r;
+
+ r = qsandwich(q, Quatvec(0, p));
+ return Pt3(r.i, r.j, r.k, p.w);
+}
+
void
memsetf(void *dp, float v, usize len)
{