diff options
Diffstat (limited to 'src/core/vert.c')
-rw-r--r-- | src/core/vert.c | 42 |
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 |