summaryrefslogtreecommitdiff
path: root/src/core/vert.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/vert.c')
-rw-r--r--src/core/vert.c42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/core/vert.c b/src/core/vert.c
new file mode 100644
index 0000000..0e62087
--- /dev/null
+++ b/src/core/vert.c
@@ -0,0 +1,42 @@
+#include "vert.h"
+
+Vert* vert_new(uint comp) {
+ Vert* vert = ssrM_new(Vert);
+ vert->comp = comp;
+ vert->position = ssrM_new(Vec3);
+ vert->normal = ssrM_new(Vec3);
+ vert->tangent = ssrM_new(Vec3);
+ vert->uv = ssrM_new(Vec2);
+ return vert;
+}
+
+void vert_init(Vert* v, uint comp) {
+ ssr_assert(v);
+ v->comp = comp;
+ v->index = 0;
+ if ((comp & VERTMASK_POSITION) && !v->position)
+ v->position = ssrM_new(Vec3);
+ else if (!(comp & VERTMASK_POSITION) && v->position)
+ ssrM_free(v->position);
+ if ((comp & VERTMASK_NORMAL) && !v->normal)
+ v->normal = ssrM_new(Vec3);
+ else if (!(comp & VERTMASK_NORMAL) && v->normal)
+ ssrM_free(v->normal);
+ if ((comp & VERTMASK_TANGENT) && !v->tangent)
+ v->tangent = ssrM_new(Vec3);
+ else if (!(comp & VERTMASK_TANGENT) && v->tangent)
+ ssrM_free(v->tangent);
+ if ((comp & VERTMASK_UV) && !v->uv)
+ v->uv = ssrM_new(Vec2);
+ else if (!(comp & VERTMASK_UV) && v->uv)
+ ssrM_free(v->uv);
+}
+
+void vert_free(Vert* v) {
+ ssr_assert(v);
+ if (v->position) ssrM_free(v->position);
+ if (v->normal) ssrM_free(v->normal);
+ if (v->tangent) ssrM_free(v->tangent);
+ if (v->uv) ssrM_free(v->uv);
+ ssrM_free(v);
+} \ No newline at end of file