/************************************************************** * * ======== kalmia ======== * * a COLLADA importer library * copyright (c) 2022 kate swanson (sanine) * * This is anti-capitalist software, released for free use by individuals and * organizations that do not operate by capitalist principles. * * Permission is hereby granted, free of charge, to any person or * organization (the "User") obtaining a copy of this software and associated * documentation files (the "Software"), to use, copy, modify, merge, * distribute, and/or sell copies of the Software, subject to the following * conditions: * * 1. The above copyright notice and this permission notice shall be included * in all copies or modified versions of the Software. * * 2. The User is one of the following: * a. An individual person, laboring for themselves * b. A non-profit organization * c. An educational institution * d. An organization that seeks shared profit for all of its members, and * allows non-members to set the cost of their labor * * 3. If the User is an organization with owners, then all owners are workers * and all workers are owners with equal equity and/or equal vote. * * 4. If the User is an organization, then the User is not law enforcement or * military, or working for or under either. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT EXPRESS OR IMPLIED WARRANTY OF * ANY KIND, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * https://anticapitalist.software/ * https://sanine.net * ****************************************************************/ #ifndef KALMIA_H #define KALMIA_H #include #include /* kalmia uses semantic versioning (semver.org) */ #define KALMIA_VERSION_MAJOR 0 #define KALMIA_VERSION_MINOR 0 #define KALMIA_VERSION_PATCH 0 /* determine precision */ #ifdef KALMIA_USE_DOUBLE typedef double ka_real_t; #define KA_STR_TO_REAL(nptr, end) strtod(nptr, end) #else typedef float ka_real_t; #define KA_STR_TO_REAL(nptr, end) strtof(nptr, end) #endif /**************** geometry types ****************/ struct ka_float_array_t { unsigned int count; /* required */ char *id; unsigned int digits; /* default 6 */ int magnitude; /* default 38 */ ka_real_t *buf; }; struct ka_param_t { char *name; char *sid; char *type; /* required */ char *semantic; }; struct ka_accessor_t { unsigned int count; /* required */ unsigned int offset; /* default 0 */ char *source; /* required */ unsigned int stride; /* default 1 */ unsigned int param_count; struct ka_param_t *param; }; struct ka_source_t { char *id; /* required */ char *name; struct ka_float_array_t float_array; struct ka_accessor_t accessor; }; struct ka_input_t { bool shared; unsigned int offset; /* required if shared */ char *semantic; /* required */ char *source; /* required */ bool use_set; unsigned int set; }; struct ka_vertices_t { char *id; /* required */ char *name; unsigned int input_count; struct ka_input_t *input; }; struct ka_triangles_t { char *name; unsigned int count; /* required */ char *material; unsigned int input_count; struct ka_input_t *input; unsigned int p_count; unsigned int *p; }; struct ka_mesh_t { unsigned int source_count; struct ka_source_t *source; struct ka_vertices_t vertices; unsigned int triangles_count; struct ka_triangles_t *triangles; }; struct ka_geometry_t { char *id; char *name; struct ka_mesh_t mesh; }; struct ka_library_geometries_t { char *id; char *name; unsigned int geometry_count; struct ka_geometry_t *geometry; }; /**************** image types ****************/ struct ka_init_from_t { char *ref; }; struct ka_image_t { char *id; char *sid; char *name; struct ka_init_from_t init_from; }; struct ka_library_images_t { char *id; char *name; unsigned int image_count; struct ka_image_t *image; }; /**************** effect types ****************/ struct ka_color_t { char *sid; ka_real_t rgba[4]; }; /**************** material types ****************/ struct ka_instance_effect_t { char *sid; char *name; char *url; /* required */ }; struct ka_material_t { char *id; char *name; struct ka_instance_effect_t instance_effect; }; struct ka_library_materials_t { char *id; char *name; unsigned int material_count; struct ka_material_t *material; }; /**************** kalmia_t ****************/ struct kalmia_t { struct ka_library_geometries_t *library_geometries; struct ka_library_materials_t *library_materials; struct ka_library_images_t *library_images; }; struct kalmia_t * kalmia_parse_file(const char *filename); void kalmia_destroy(struct kalmia_t *k); #endif