// Util
// ==================================================================================================================
-#define VG_PIf 3.14159265358979323846264338327950288f
+#define VG_PIf 3.14159265358979323846264338327950288f
+#define VG_TAUf 6.28318530717958647692528676655900576f
// Simple min/max replacements
static inline float vg_minf( float a, float b )
a[0] = 0.f; a[1] = 0.f; a[2] = 0.f; a[3] = 0.f;
}
+// Matrix 2x2
+// ===========================================================================================================
+
+#define M2X2_INDENTIY {{1.0f, 0.0f, }, \
+ { 0.0f, 1.0f, }}
+
+#define M2X2_ZERO {{0.0f, 0.0f, }, \
+ { 0.0f, 0.0f, }}
+
+static inline void m2x2_copy( m2x2f a, m2x2f b )
+{
+ v2_copy( a[0], b[0] );
+ v2_copy( a[1], b[1] );
+}
+
+static inline void m2x2_identity( m2x2f a )
+{
+ m2x2f id = M2X2_INDENTIY;
+ m2x2_copy( id, a );
+}
+
+static inline void m2x2_create_rotation( m2x2f a, float theta )
+{
+ float s, c;
+
+ s = sinf( theta );
+ c = cosf( theta );
+
+ a[0][0] = c;
+ a[0][1] = -s;
+ a[1][0] = s;
+ a[1][1] = c;
+}
+
// Matrix 3x3
//======================================================================================================