spacegame/include/ply.h

86 lines
1.6 KiB
C

#ifndef PLY_H
#define PLY_H
#include <stddef.h>
#include <cglm/types.h>
#include <stdint.h>
typedef enum {
PLY_FORMAT_INVALID = -1,
PLY_FORMAT_ASCII = 0,
PLY_FORMAT_LE = 1,
PLY_FORMAT_BE = 2,
} PlyFormatType;
typedef enum {
PLY_HEADER_INVALID = -1,
PLY_HEADER_COMMENT = 0,
PLY_HEADER_END = 1,
PLY_HEADER_ELEMENT = 2,
PLY_HEADER_PROPERTY = 3,
} PlyHeaderType;
typedef enum {
PLY_TYPE_INVALID = -1,
PLY_TYPE_CHAR = 0,
PLY_TYPE_UCHAR = 1,
PLY_TYPE_SHORT = 2,
PLY_TYPE_USHORT = 3,
PLY_TYPE_INT = 4,
PLY_TYPE_UINT = 5,
PLY_TYPE_FLOAT = 6,
PLY_TYPE_DOUBLE = 7,
} PlyPropertyType;
typedef struct PlyPropertyStruct {
char* name;
PlyPropertyType count;
PlyPropertyType element;
void* elements;
void* counts;
struct PlyPropertyStruct* next;
} PlyProperty;
typedef struct PlyElementStruct {
char* name;
int count;
PlyProperty* properties;
struct PlyElementStruct* next;
} PlyElement;
typedef struct PlyMeshStruct {
uint32_t vertex_count;
vec3* position;
vec4* colour;
vec3* normal;
vec2* uv;
uint32_t index_count;
uint16_t* index;
} PlyMesh;
typedef struct PlyMappingsStruct {
char* vertex_element;
char* position[3];
char* normal[3];
char* colour[4];
char* texture[2];
char* face_element;
char* index;
} PlyMappings;
extern PlyMappings default_ply_mappings;
extern const char* const ply_formats[];
extern const char* const ply_header_items[];
extern const char* const ply_type_strings[];
extern const size_t ply_type_sizes[];
PlyMesh ply_load_mesh(char* filename, PlyMappings mappings);
void ply_free_elements(PlyElement* elements_head);
#endif