--- /dev/null
+#include <array>
+#define GLM_FORCE_PURE
+#include <glm/glm.hpp>
+
+using namespace std;
+
+constexpr array<glm::vec3, 6> quadToTriangles(const array<glm::vec3, 4> quads) {
+ return {
+ quads[0],
+ quads[1],
+ quads[2],
+ quads[2],
+ quads[3],
+ quads[0]
+ };
+}
+
+constexpr const glm::vec3 foo() {
+ constexpr glm::vec3 foo(1,2,3);
+ return foo;
+}
+
+constexpr array<glm::vec3, 36> cube() {
+ int i = 0;
+ array<glm::vec3, 36> vertices;
+
+ const array<glm::vec3, 4> front = {
+ glm::vec3(1, -1, -1),
+ glm::vec3(-1, -1, -1),
+ glm::vec3(-1, 1, -1),
+ glm::vec3(1, 1, -1)
+ };
+
+ for (auto v: quadToTriangles(front))
+ vertices[i++] = v;
+
+ const array<glm::vec3, 4> back = {
+ glm::vec3(1, 1, 1),
+ glm::vec3(-1, 1, 1),
+ glm::vec3(-1, -1, 1),
+ glm::vec3(1, -1, 1)
+ };
+ for (auto v: quadToTriangles(back))
+ vertices[i++] = v;
+
+
+ const array<glm::vec3, 4> top = {
+ glm::vec3(1, 1, -1),
+ glm::vec3(-1, 1, -1),
+ glm::vec3(-1, 1, 1),
+ glm::vec3(1, 1, 1)
+ };
+ for (auto v: quadToTriangles(top))
+ vertices[i++] = v;
+
+ const array<glm::vec3, 4> bottom = {
+ glm::vec3(1, -1, 1),
+ glm::vec3(-1, -1, 1),
+ glm::vec3(-1, -1, -1),
+ glm::vec3(1, -1, -1)
+ };
+ for (auto v: quadToTriangles(bottom))
+ vertices[i++] = v;
+
+ const array<glm::vec3, 4> left = {
+ glm::vec3(-1, 1, 1),
+ glm::vec3(-1, 1, -1),
+ glm::vec3(-1, -1, -1),
+ glm::vec3(-1, -1, 1)
+ };
+ for (auto v: quadToTriangles(left))
+ vertices[i++] = v;
+
+ const array<glm::vec3, 4> right = {
+ glm::vec3(1, 1, -1),
+ glm::vec3(1, 1, 1),
+ glm::vec3(1, -1, 1),
+ glm::vec3(1, -1, -1)
+ };
+ for (auto v: quadToTriangles(right))
+ vertices[i++] = v;
+
+ return vertices;
+}