aboutsummaryrefslogtreecommitdiff
path: root/camera.c
diff options
context:
space:
mode:
authorrodri <rgl@antares-labs.eu>2024-03-25 22:25:32 +0000
committerrodri <rgl@antares-labs.eu>2024-03-25 22:25:32 +0000
commit0874435504c0816c0e5f11a2e852507626fe185e (patch)
treeac42078e476358ce3c0131e6a5da19fc4aebd9e8 /camera.c
parent764afe37e2438498bcace9de56b9618565b7cd34 (diff)
downloadlibgraphics-0874435504c0816c0e5f11a2e852507626fe185e.tar.gz
libgraphics-0874435504c0816c0e5f11a2e852507626fe185e.tar.bz2
libgraphics-0874435504c0816c0e5f11a2e852507626fe185e.zip
implement a (partially) concurrent pipeline.
Diffstat (limited to 'camera.c')
-rw-r--r--camera.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/camera.c b/camera.c
index eb6f181..67bca08 100644
--- a/camera.c
+++ b/camera.c
@@ -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);
}