diff options
author | rodri <rgl@antares-labs.eu> | 2024-03-25 22:25:32 +0000 |
---|---|---|
committer | rodri <rgl@antares-labs.eu> | 2024-03-25 22:25:32 +0000 |
commit | 0874435504c0816c0e5f11a2e852507626fe185e (patch) | |
tree | ac42078e476358ce3c0131e6a5da19fc4aebd9e8 /camera.c | |
parent | 764afe37e2438498bcace9de56b9618565b7cd34 (diff) | |
download | libgraphics-0874435504c0816c0e5f11a2e852507626fe185e.tar.gz libgraphics-0874435504c0816c0e5f11a2e852507626fe185e.tar.bz2 libgraphics-0874435504c0816c0e5f11a2e852507626fe185e.zip |
implement a (partially) concurrent pipeline.
Diffstat (limited to 'camera.c')
-rw-r--r-- | camera.c | 16 |
1 files changed, 14 insertions, 2 deletions
@@ -79,15 +79,27 @@ reloadcamera(Camera *c) } void -shootcamera(Camera *c, Shader *s) +shootcamera(Camera *c, Shadertab *s) { + Renderjob *job; uvlong t0, t1; + job = emalloc(sizeof *job); + memset(job, 0, sizeof *job); + job->fb = c->vp->fbctl->fb[c->vp->fbctl->idx^1]; /* address the back buffer */ + job->scene = c->s; + job->shaders = s; + job->donec = chancreate(sizeof(void*), 0); + c->vp->fbctl->reset(c->vp->fbctl); t0 = nanosec(); - shade(c->vp->fbctl->fb[c->vp->fbctl->idx^1], c->s, s); /* address the back buffer */ + sendp(c->rctl->c, job); + recvp(job->donec); t1 = nanosec(); c->vp->fbctl->swap(c->vp->fbctl); + chanfree(job->donec); + free(job); + updatestats(c, t1-t0); } |