aboutsummaryrefslogtreecommitdiff
path: root/graphics.h
diff options
context:
space:
mode:
authorrodri <rgl@antares-labs.eu>2020-04-28 12:18:55 +0000
committerrodri <rgl@antares-labs.eu>2020-04-28 12:18:55 +0000
commit3857a7ad606f4f050411d27fc94116731fddb1b3 (patch)
tree16a3da7365dd7e1ba89f7baabdcad75793a7e947 /graphics.h
parent91d8cc8d9adfec7e9b5f415ebd7b7f740cde6e2d (diff)
downloadlibgraphics-3857a7ad606f4f050411d27fc94116731fddb1b3.tar.gz
libgraphics-3857a7ad606f4f050411d27fc94116731fddb1b3.tar.bz2
libgraphics-3857a7ad606f4f050411d27fc94116731fddb1b3.zip
transcribe macros into actual functions. remove unused memdraw code.
Diffstat (limited to 'graphics.h')
-rw-r--r--graphics.h40
1 files changed, 33 insertions, 7 deletions
diff --git a/graphics.h b/graphics.h
index b9582f3..44f213d 100644
--- a/graphics.h
+++ b/graphics.h
@@ -3,20 +3,45 @@ typedef enum {
Ppersp /* perspective */
} Projection;
+typedef struct Color Color;
typedef struct Vertex Vertex;
+typedef struct Framebuffer Framebuffer;
+typedef struct Viewport Viewport;
typedef struct Camera Camera;
-struct Vertex {
+struct Color
+{
+ double r, g, b;
+};
+
+struct Vertex
+{
Point3 p; /* position */
Point3 n; /* surface normal */
+ Color c; /* shading color */
+};
+
+struct Framebuffer
+{
+ Rectangle r; /* frame geometry */
+ int bpp; /* bytes per pixel */
+ uchar *color; /* pixel color buffer */
+ float *depth; /* pixel depth buffer */
+};
+
+struct Viewport
+{
+ RFrame;
+ Framebuffer;
};
-struct Camera {
+struct Camera
+{
RFrame3; /* VCS */
Image *viewport;
double fov; /* vertical FOV */
struct {
- double n, f;
+ double n, f; /* near and far clipping planes */
} clip;
Matrix3 proj; /* VCS to NDC xform */
Projection ptype;
@@ -29,10 +54,11 @@ void aimcamera(Camera*, Point3);
void reloadcamera(Camera*);
/* rendering */
-#define FPS2MS(n) (1000/(n))
-#define WORLD2VCS(cp, p) (rframexform3((p), *(cp)))
-#define VCS2NDC(cp, p) (xform3((p), (cp)->proj))
-#define WORLD2NDC(cp, p) (VCS2NDC((cp), WORLD2VCS((cp), (p))))
+#define FPS (60) /* frame rate */
+#define MS2FR (1e3/FPS) /* ms per frame */
+Point3 world2vcs(Camera*, Point3);
+Point3 vcs2ndc(Camera*, Point3);
+Point3 world2ndc(Camera*, Point3);
int isclipping(Point3);
Point toviewport(Camera*, Point3);
Point2 fromviewport(Camera*, Point);