From 799c2a25df4283ba46747864dc669c8905b540fc Mon Sep 17 00:00:00 2001 From: rodri Date: Thu, 29 Aug 2024 19:27:26 +0000 Subject: use the new raster interface. --- med.c | 6 +++--- procgen.c | 12 ++++++------ solar.c | 2 +- vis.c | 26 +++++++++++++++++++------- 4 files changed, 29 insertions(+), 17 deletions(-) diff --git a/med.c b/med.c index 1ca8ce7..9119db3 100644 --- a/med.c +++ b/med.c @@ -100,7 +100,7 @@ RFrame3 ONF3 = { /* default orthonormal rframe */ 0,1,0,0, 0,0,1,0 }; -LightSource light; /* global point light */ +LightSource light; /* global point light */ static int doprof; static int showhud; @@ -515,8 +515,8 @@ renderproc(void *) Δt = nsec() - t0; if(Δt > HZ2MS(60)*1000000ULL){ lockdisplay(display); - cam->view->draw(cam->view, screenb); - compass.cam->view->draw(compass.cam->view, screenb); + cam->view->draw(cam->view, screenb, nil); + compass.cam->view->draw(compass.cam->view, screenb, nil); unlockdisplay(display); nbsend(drawc, nil); t0 += Δt; diff --git a/procgen.c b/procgen.c index 0cf6aab..7ce33e1 100644 --- a/procgen.c +++ b/procgen.c @@ -100,7 +100,7 @@ tree(double x, double h) static Point3 vs(VSparams *sp) { - return vcs2clip(sp->su->camera, sp->v->p); + return sp->v->p; } static Color @@ -175,18 +175,18 @@ threadmain(int argc, char *argv[]) placecamera(cam, scn, Pt3(0,0,0,1), Vec3(0,0,-1), Vec3(0,1,0)); quad[0].type = quad[1].type = PTriangle; - quad[0].v[0].p = viewport2vcs(cam, Pt3(out->r.min.x, out->r.max.y, 1, 1)); - quad[0].v[1].p = viewport2vcs(cam, Pt3(out->r.max.x, out->r.min.y, 1, 1)); - quad[0].v[2].p = viewport2vcs(cam, Pt3(out->r.min.x, out->r.min.y, 1, 1)); + quad[0].v[0].p = vcs2clip(cam, viewport2vcs(cam, Pt3(out->r.min.x, out->r.max.y, 1, 1))); + quad[0].v[1].p = vcs2clip(cam, viewport2vcs(cam, Pt3(out->r.max.x, out->r.min.y, 1, 1))); + quad[0].v[2].p = vcs2clip(cam, viewport2vcs(cam, Pt3(out->r.min.x, out->r.min.y, 1, 1))); quad[1].v[0].p = quad[0].v[0].p; - quad[1].v[1].p = viewport2vcs(cam, Pt3(out->r.max.x, out->r.max.y, 1, 1)); + quad[1].v[1].p = vcs2clip(cam, viewport2vcs(cam, Pt3(out->r.max.x, out->r.max.y, 1, 1))); quad[1].v[2].p = quad[0].v[1].p; mdl->addprim(mdl, quad[0]); mdl->addprim(mdl, quad[1]); scn->addent(scn, ent); do shootcamera(cam, &shaders); while(skip--); - cam->view->memdraw(cam->view, out); + cam->view->memdraw(cam->view, out, nil); writememimage(1, out); threadexitsall(nil); diff --git a/solar.c b/solar.c index 6a5bc75..470c954 100644 --- a/solar.c +++ b/solar.c @@ -573,7 +573,7 @@ renderproc(void *) Δt = nsec() - t0; if(Δt > HZ2MS(60)*1000000ULL){ lockdisplay(display); - camera->view->draw(camera->view, screenb); + camera->view->draw(camera->view, screenb, nil); unlockdisplay(display); nbsend(drawc, nil); t0 += Δt; diff --git a/vis.c b/vis.c index 89b862f..28cb4dc 100644 --- a/vis.c +++ b/vis.c @@ -166,6 +166,8 @@ gouraudshader(FSparams *sp) else tc = Pt3(1,1,1,1); + sp->toraster(sp, "normals", &sp->v.n); + return modulapt3(sp->v.c, tc); } @@ -264,6 +266,8 @@ phongshader(FSparams *sp) specular = mulpt3(lightc, spec*Ks); specular = modulapt3(specular, m.specular); + sp->toraster(sp, "normals", &sp->v.n); + c = addpt3(ambient, addpt3(diffuse, specular)); c.a = m.diffuse.a; return c; @@ -336,6 +340,8 @@ blinnshader(FSparams *sp) specular = mulpt3(lightc, spec*Ks); specular = modulapt3(specular, m.specular); + sp->toraster(sp, "normals", &sp->v.n); + c = addpt3(ambient, addpt3(diffuse, specular)); c.a = m.diffuse.a; return c; @@ -371,6 +377,8 @@ toonshader(FSparams *sp) intens > 0.30? 0.45: intens > 0.15? 0.30: 0.15; + sp->toraster(sp, "normals", &sp->v.n); + return Pt3(intens, 0.6*intens, 0, 1); } @@ -394,6 +402,8 @@ identshader(FSparams *sp) else tc = Pt3(1,1,1,1); + sp->toraster(sp, "normals", &sp->v.n); + return modulapt3(sp->v.c, tc); } @@ -601,10 +611,7 @@ renderproc(void *) Δt = nsec() - t0; if(Δt > HZ2MS(60)*1000000ULL){ lockdisplay(display); - if(shownormals) - maincam->view->fbctl->drawnormals(maincam->view->fbctl, screenb); - else - maincam->view->draw(maincam->view, screenb); + maincam->view->draw(maincam->view, screenb, shownormals? "normals": nil); unlockdisplay(display); nbsend(drawc, nil); t0 += Δt; @@ -659,6 +666,7 @@ lmb(void) } }else{ /* DBG only */ Framebuf *fb; + Raster *cr, *zr, *nr; Point2 p₂; Point p; Color c, n; @@ -675,9 +683,12 @@ lmb(void) return; qlock(maincam->view->fbctl); fb = maincam->view->getfb(maincam->view); - c = ul2col(fb->cb[p.y*Dx(fb->r) + p.x]); - n = ul2col(fb->nb[p.y*Dx(fb->r) + p.x]); - z = fb->zb[p.y*Dx(fb->r) + p.x]; + cr = fb->rasters; + zr = cr->next; + nr = maincam->view->fetchraster(maincam->view, "normals"); + c = ul2col(cr->data[p.y*Dx(fb->r) + p.x]); + n = nr != nil? ul2col(nr->data[p.y*Dx(fb->r) + p.x]): Vec3(0,0,0); + z = *(float*)&zr->data[p.y*Dx(fb->r) + p.x]; // abuf = &fb->abuf; // if(abuf->stk != nil){ // astk = &abuf->stk[p.y*Dx(fb->r) + p.x]; @@ -1112,6 +1123,7 @@ fprint(2, "screen %R\n", screenb->r); sysfatal("Cam: %r"); placecamera(cams[i], scene, camcfgs[i].p, camcfgs[i].lookat, camcfgs[i].up); cams[i]->view->setscale(cams[i]->view, scale, scale); + cams[i]->view->createraster(cams[i]->view, "normals", COLOR32); if(scale == 2) cams[i]->view->setscalefilter(cams[i]->view, UFScale2x); -- cgit v1.2.3