diff --git a/src/rendering/rasterize.h b/src/rendering/rasterize.h
new file mode 100644
index 0000000000000000000000000000000000000000..4269c626eb7c30177fc6d91884c11b4cc74a69d4
--- /dev/null
+++ b/src/rendering/rasterize.h
@@ -0,0 +1,52 @@
+#ifndef _RASTERIZE_H
+#define _RASTERIZE_H
+
+#include "3x3matrix.h"
+#include "2x2matrix.h"
+#include "lcd.h"
+#include <math.h>
+#include <avr/pgmspace.h>
+#include "ili934x.h"
+#define TRANSPARENTCOLOR 63519
+
+_2x1Matrix transpose_map(_3x3Matrix m1, _3x1Matrix m2);
+
+typedef struct {
+    _2x1Matrix p0, p1, p2;
+} tri2d;
+
+typedef struct {
+    _2x1Matrix p0, p1, p2, p3; //This makes me sad to implement it this way, so please don't use invalid rectangles.
+} rect2d;
+
+typedef struct {
+    _3x1Matrix p0, p1, p2;
+} tri3d;
+
+typedef struct {
+    _3x1Matrix gr, anchor;
+} plane3d;
+
+rectangle getXYBound2d(tri2d t);
+rectangle getXYBound3d(tri3d t);
+void affineRasterize(_2x2Matrix m, PGM_P imgdata, rectangle imgRegion, int16_t dispX, int16_t dispY);
+void perspectiveRasterize(tri3d t, tri2d tuv, PGM_P imgdata, rectangle imgRegion);
+void perspectiveRasterizeComposite(tri3d t, tri2d tuv, PGM_P imgdata, rectangle imgRegion, float composite);
+void UVMapRasterize(tri3d t0, tri2d t1);
+
+rectangle getXYBound2dRect(rect2d t);
+rectangle getXYBound3d(tri3d t);
+float triSign (_2x1Matrix p0, _2x1Matrix p1, _2x1Matrix p2);
+plane3d getPlane(tri3d t);
+float getZ(float x, float y, plane3d p);
+unsigned char inTriangle(float x, float y, tri2d);
+tri2d transpose2dTri(tri2d t, _2x2Matrix m);
+rect2d transpose2dRect(rect2d t, _2x2Matrix m);
+tri3d transpose3dTri(tri3d t, _3x3Matrix m);
+tri3d seperate(_3x3Matrix m);
+_3x3Matrix combine2d(_2x1Matrix m1, _2x1Matrix m2, _2x1Matrix m3);
+_2x1Matrix transpose_2x3(_3x3Matrix m1, _2x1Matrix m2);
+
+uint16_t maxInt(uint16_t v1, uint16_t v2);
+
+#endif //_RASTERIZE_H