+#if HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+
+// generic function arguments
+
+#define ARGS_P const GLscalar* p
+#define PASS_P p
+
+#define ARGS_M const Mf::Matrix4& m
+#define PASS_M m.data()
+
+// ordinal function arguments
+
+#define ARGS_S2 GLscalar a, GLscalar b
+#define PASS_S2 a, b
+#define ARGS_S3 GLscalar a, GLscalar b, GLscalar c
+#define PASS_S3 a, b, c
+#define ARGS_S4 GLscalar a, GLscalar b, GLscalar c, GLscalar d
+#define PASS_S4 a, b, c, d
+
+#define ARGS_P2 const Mf::Vector2& p
+#define PASS_P2 p.data()
+#define ARGS_P3 const Mf::Vector3& p
+#define PASS_P3 p.data()
+#define ARGS_P4 const Mf::Vector4& p
+#define PASS_P4 p.data()
+
+#define ARGS_V2 const Mf::Vector2& v
+#define PASS_V2 v[0], v[1]
+#define ARGS_V3 const Mf::Vector3& v
+#define PASS_V3 v[0], v[1], v[2]
+#define ARGS_V4 const Mf::Vector4& v
+#define PASS_V4 v[0], v[1], v[2], v[3]