diff options
author | rodri <rgl@antares-labs.eu> | 2020-03-04 21:03:21 +0000 |
---|---|---|
committer | rodri <rgl@antares-labs.eu> | 2020-03-04 21:03:21 +0000 |
commit | a435467f81a1d9d429109f3a34988c642bed6035 (patch) | |
tree | fe1d314e5c9981f4b087ce4990bbe1ea6c3082df /libgraphics/render.c | |
parent | 3e0fe77fe3832b4c4eb7abe9c16088d9ff08f7bc (diff) | |
download | 3dee-a435467f81a1d9d429109f3a34988c642bed6035.tar.gz 3dee-a435467f81a1d9d429109f3a34988c642bed6035.tar.bz2 3dee-a435467f81a1d9d429109f3a34988c642bed6035.zip |
first steps towards a general rendering architecture.
Diffstat (limited to 'libgraphics/render.c')
-rw-r--r-- | libgraphics/render.c | 27 |
1 files changed, 13 insertions, 14 deletions
diff --git a/libgraphics/render.c b/libgraphics/render.c index f4e4c0f..ddc0663 100644 --- a/libgraphics/render.c +++ b/libgraphics/render.c @@ -4,16 +4,6 @@ #include "../geometry.h" #include "../graphics.h" -/* - * careful with concurrent rendering. - * use a lock or embed on each routine. - */ -static RFrame imgrframe = { - 0, 0, 1, /* p */ - 1, 0, 0, /* bx */ - 0, -1, 0 /* by */ -}; - /* requires p to be in NDC */ int isclipping(Point3 p) @@ -51,17 +41,26 @@ Point toviewport(Camera *c, Point3 p) { Point2 p2; + RFrame rf = { + c->viewport->r.min.x, c->viewport->r.max.y, 1, + 1, 0, 0, + 0, -1, 0 + }; - imgrframe.p = Pt2(c->viewport->r.min.x, c->viewport->r.max.y, 1); - p2 = invrframexform(flatten(c, p), imgrframe); + p2 = invrframexform(flatten(c, p), rf); return (Point){p2.x, p2.y}; } Point2 fromviewport(Camera *c, Point p) { - imgrframe.p = Pt2(c->viewport->r.min.x, c->viewport->r.max.y, 1); - return rframexform(Pt2(p.x, p.y, 1), imgrframe); + RFrame rf = { + c->viewport->r.min.x, c->viewport->r.max.y, 1, + 1, 0, 0, + 0, -1, 0 + }; + + return rframexform(Pt2(p.x, p.y, 1), rf); } void |