summaryrefslogtreecommitdiff
path: root/src/objload.h
diff options
context:
space:
mode:
authorkartofen <mladenovnasko0@gmail.com>2023-11-11 19:00:10 +0200
committerkartofen <mladenovnasko0@gmail.com>2023-11-11 19:00:10 +0200
commit1e436946514f3a0e9fe3d091394db6b86e06f033 (patch)
treecddf3bb618ade66fd5bd4eacd028a7d54a760e37 /src/objload.h
parent2a733f3d513a7279c1df4efe88fc5386ced2ed14 (diff)
.obj loading
Diffstat (limited to 'src/objload.h')
-rw-r--r--src/objload.h60
1 files changed, 60 insertions, 0 deletions
diff --git a/src/objload.h b/src/objload.h
new file mode 100644
index 0000000..8993f25
--- /dev/null
+++ b/src/objload.h
@@ -0,0 +1,60 @@
+#ifndef OBJLOAD_H
+#define OBJLOAD_H
+
+#include <stdint.h>
+
+typedef enum OBJ_RESULT {
+ OBJ_SUCCESS = 0,
+ OBJ_LINE_UNKNOWN,
+ OBJ_NOT_SUPPORTED_LINE,
+ OBJ_NOT_SUPPORTED_UNKNOWN,
+ OBJ_ERROR_UNKNOWN,
+} OBJRES;
+
+typedef struct objload {
+ size_t nvert;
+ float (*vertices)[3];
+
+ size_t nnorm;
+ float (*normals)[3];
+
+ size_t nuv;
+ float (*uvcoord)[2];
+
+ size_t nfaces;
+ struct face {
+ size_t vertidx;
+ size_t normidx;
+ size_t uvidx;
+ } (*faces)[3];
+} objload_t;
+
+
+struct obj_struct_metadata {
+ size_t full_sz;
+
+ size_t vert_off;
+ size_t norm_off;
+ size_t uvtx_off;
+
+ enum {
+ OBJ_STRUCT_VERT_EXISTS = 1 << 0,
+ OBJ_STRUCT_NORM_EXISTS = 1 << 1,
+ OBJ_STRUCT_UVTX_EXISTS = 1 << 2,
+ OBJ_STRUCT_ALL_EXIST = 7,
+ } exist_flag;
+};
+
+typedef uint32_t obj_idx;
+
+OBJRES obj_load(FILE *fp, objload_t *obj);
+void obj_free(objload_t obj);
+
+OBJRES obj_transfer_raw(objload_t obj,
+ struct obj_struct_metadata metadata,
+ size_t *nvbo, void *vbo);
+
+// OBJRES obj_transfer_indxed(objload_t obj,
+ // size_t *nvbo, obj_vbo vbo,
+ // size_t *nidx, obj_idx ibo);
+#endif