![]() |
LibGame v0.4.0
The LG Game Engine - Copyright (C) 2024-2026 ETMSoftware
|
Functions | |
| LG_Mesh * | lg_mesh_load (const char *full_path, LG_LoadMesh_Flags flags) |
| LG_Mesh * | lg_mesh_new_from_obj (const char *full_path, zboolean invert_z, zboolean normalize_xyz, zboolean horiz_center, zboolean vert_center, zboolean vert_bottom) |
| LG_Mesh * | lg_mesh_new_from_obj_relpath (const char *relative_path, zboolean invert_z, zboolean normalize_xyz, zboolean horiz_center, zboolean vert_center, zboolean vert_bottom) |
| LG_Mesh * | lg_mesh_new_from_fbx (const char *full_path, zboolean invert_z, zboolean normalize_xyz, zboolean horiz_center, zboolean vert_center, zboolean vert_bottom) |
| LG_Mesh * | lg_mesh_new_from_fbx_relpath (const char *relative_path, zboolean invert_z, zboolean normalize_xyz, zboolean horiz_center, zboolean vert_center, zboolean vert_bottom) |
| void | lg_mesh_free (LG_Mesh *mesh) |
| void | lg_mesh_free_v2 (LG_Mesh **mesh) |
| int | lg_bmesh_save_to_file (const char *full_path, LG_Mesh *mesh) |
| int | lg_bmesh_load_from_file (const char *full_path, LG_Mesh **mesh) |
| int | lg_mesh_reload_mats (LG_Mesh *mesh) |
| void | lg_serialize_LG_Material_64_to_32 (Serializable_LG_Material *s_mat, LG_Material *mat) |
| void | lg_unserialize_LG_Material_32_to_64 (LG_Material *mat, Serializable_LG_Material *s_mat) |
| void | lg_serialize_LG_Mesh_64_to_32 (Serializable_LG_Mesh *s_mesh, LG_Mesh *mesh) |
| void | lg_unserialize_LG_Mesh_32_to_64 (LG_Mesh *mesh, Serializable_LG_Mesh *s_mesh) |
| LG_LoadMesh_Flags | lg_loadmesh_flags (zboolean save_to_assets, zboolean invert_z, zboolean normalize_xyz, zboolean horiz_center, zboolean vert_center, zboolean vert_bottom) |
| void | lg_mesh_info (LG_Mesh *mesh, int show_first_n) |
| char * | lg_replace_file_extension (const char *path, const char *new_ext) |
This module deals with meshes, ie data that will feed VBOs and IBOs for fast and efficient drawing.
You can/should only use this func to load meshes, if they're all in an <assets_dir> folder, defined by the macro ASSETS_DIR
and you can/should only use this func when done with a mesh:
and just ignore the details.
(Use everything here only if you know what you're doing).
NEW CONVENTIONS FOR PATHS / FILE NAMES AS FUNC ARGS:
In funcs names:
| LG_Mesh * lg_mesh_load | ( | const char * | full_path, |
| LG_LoadMesh_Flags | flags | ||
| ) |
Load OBJ or FBX or BMESH mesh file
If all your meshes (OBJ, FBX, BMESH) are in an <assets_dir> folder, defined by the macro ASSETS_DIR, then this is the entry point for loading them and the only func you need to call
If OBJ or FBX file successfully loaded, it will be saved as BMESH in cache, and also in assets if flags.save_to_assets is set
Always saved as BMESH as it is LibGame binary format for meshes - optimized, faster to load, not requiring parsing
WARNING: FBX support is not complete yet
| full_path | Full path of mesh file, with extension OBJ or FBX or BMESH |
| flags | Apply to mesh: save_to_assets, invert_z, normalize_xyz, horiz_center, vert_center, vert_bottom |
| LG_Mesh * lg_mesh_new_from_obj | ( | const char * | full_path, |
| zboolean | invert_z, | ||
| zboolean | normalize_xyz, | ||
| zboolean | horiz_center, | ||
| zboolean | vert_center, | ||
| zboolean | vert_bottom | ||
| ) |
Create mesh from OBJ file.
Read data from WAVEFRONT OBJ files: vertex/index values for v (coords), vt (texture coords), vn (normals), f (triangular faces), mtllib, usemtl (materials/textures stuff), plus newmtl, and map_K* (in MTL files).
Other data is ignored so far.
=== WARNING: MESHES MUST BE PURE-TRIANGULAR ===
Will create a Vertex_uv_n VBO (see lg_vertex.h).
NO-OP on Android as BMESH files should be used instead
| full_path | Full (absolute) path of OBJ file (with extension OBJ) |
| invert_z | Invert z spatial coord - should be set to TRUE if mesh uses RH coords sys, FALSE if mesh uses LH coords sys |
| normalize_xyz | Normalize spatial coords |
| horiz_center | Center mesh horizontally |
| vert_center | Center mesh vertically, if vert_bottom is not set |
| vert_bottom | Set mesh origin vertically at bottom, override vert_center |
| LG_Mesh * lg_mesh_new_from_obj_relpath | ( | const char * | relative_path, |
| zboolean | invert_z, | ||
| zboolean | normalize_xyz, | ||
| zboolean | horiz_center, | ||
| zboolean | vert_center, | ||
| zboolean | vert_bottom | ||
| ) |
Same as above but take OBJ file relative path
| relative_path | Relative path of OBJ file (with extension OBJ), expected to be in OBJ_DIR predefined location |
| invert_z | Invert z spatial coord - should be set to TRUE if mesh uses RH coords sys, FALSE if mesh uses LH coords sys |
| normalize_xyz | Normalize spatial coords |
| horiz_center | Center mesh horizontally |
| vert_center | Center mesh vertically, if vert_bottom is not set |
| vert_bottom | Set mesh origin vertically at bottom, override vert_center |
| LG_Mesh * lg_mesh_new_from_fbx | ( | const char * | full_path, |
| zboolean | invert_z, | ||
| zboolean | normalize_xyz, | ||
| zboolean | horiz_center, | ||
| zboolean | vert_center, | ||
| zboolean | vert_bottom | ||
| ) |
Create mesh from FBX file.
| full_path | Full path of FBX file (with extension FBX) |
| invert_z | Invert z spatial coord - should be set to TRUE if mesh uses RH coords sys, FALSE if mesh uses LH coords sys |
| normalize_xyz | Normalize spatial coords |
| horiz_center | Center mesh horizontally |
| vert_center | Center mesh vertically, if vert_bottom is not set |
| vert_bottom | Set mesh origin vertically at bottom, override vert_center |
| LG_Mesh * lg_mesh_new_from_fbx_relpath | ( | const char * | relative_path, |
| zboolean | invert_z, | ||
| zboolean | normalize_xyz, | ||
| zboolean | horiz_center, | ||
| zboolean | vert_center, | ||
| zboolean | vert_bottom | ||
| ) |
Create mesh from FBX file.
| relative_path | Relative path of FBX file (with extension FBX), expected to be in FBX_DIR predefined location |
| invert_z | Invert z spatial coord - should be set to TRUE if mesh uses RH coords sys, FALSE if mesh uses LH coords sys |
| normalize_xyz | Normalize spatial coords |
| horiz_center | Center mesh horizontally |
| vert_center | Center mesh vertically, if vert_bottom is not set |
| vert_bottom | Set mesh origin vertically at bottom, override vert_center |
| void lg_mesh_free | ( | LG_Mesh * | mesh | ) |
Free mesh.
| mesh | Pointer to mesh |
| void lg_mesh_free_v2 | ( | LG_Mesh ** | mesh | ) |
NEW - needs extensive testing
Free mesh v2.
Take pointer to pointer to mesh arg, so that it can be nullified afterwards.
| mesh | Pointer to pointer to mesh |
| int lg_bmesh_save_to_file | ( | const char * | full_path, |
| LG_Mesh * | mesh | ||
| ) |
Save mesh in BINARY MESH (.bmesh) format. Don't add suffix BINARY_MESH_EXT, as it's done automagically.
| full_path | BMESH file full path |
| mesh | Pointer to a LG_Mesh |
| int lg_bmesh_load_from_file | ( | const char * | full_path, |
| LG_Mesh ** | mesh | ||
| ) |
Load mesh from BINARY MESH (.bmesh) file. Don't add suffix BINARY_MESH_EXT, as it's done automagically.
| full_path | BMESH file full path |
| mesh | Pointer to an array of pointers to LG_Mesh |
| int lg_mesh_reload_mats | ( | LG_Mesh * | mesh | ) |
Reload materials textures correctly, when mesh is not loaded from OBJ file.
| mesh | Pointer to a LG_Mesh |
| void lg_serialize_LG_Material_64_to_32 | ( | Serializable_LG_Material * | s_mat, |
| LG_Material * | mat | ||
| ) |
Serialize a LG_Material instance
| s_mat | Pointer to a Serializable_LG_Material |
| mat | Pointer to a Serializable_LG_Material |
| void lg_unserialize_LG_Material_32_to_64 | ( | LG_Material * | mat, |
| Serializable_LG_Material * | s_mat | ||
| ) |
Unserialize a LG_Material instance
| mat | Pointer to a Serializable_LG_Material |
| s_mat | Pointer to a Serializable_LG_Material |
| void lg_serialize_LG_Mesh_64_to_32 | ( | Serializable_LG_Mesh * | s_mesh, |
| LG_Mesh * | mesh | ||
| ) |
Serialize a LG_Mesh instance
| s_mesh | Pointer to a Serializable_LG_Mesh |
| mesh | Pointer to a LG_Mesh |
| void lg_unserialize_LG_Mesh_32_to_64 | ( | LG_Mesh * | mesh, |
| Serializable_LG_Mesh * | s_mesh | ||
| ) |
Unserialize a LG_Mesh instance
| mesh | Pointer to a LG_Mesh |
| s_mesh | Pointer to a Serializable_LG_Mesh |
| LG_LoadMesh_Flags lg_loadmesh_flags | ( | zboolean | save_to_assets, |
| zboolean | invert_z, | ||
| zboolean | normalize_xyz, | ||
| zboolean | horiz_center, | ||
| zboolean | vert_center, | ||
| zboolean | vert_bottom | ||
| ) |
Mesh loading flags.
See lg_mesh_load().
You can use these helper, which are all set to TRUE:
| save_to_assets | Save to assets as BMESH, otherwise to cache - on Android, should always be set to FALSE as you can't write to assets |
| invert_z | Invert z spatial coord - should be set to TRUE if mesh uses RH coords sys, FALSE if mesh uses LH coords sys |
| normalize_xyz | |
| horiz_center | |
| vert_center | Center mesh vertically, if vert_bottom is not set |
| vert_bottom | Set mesh origin vertically at bottom, override vert_center |
| void lg_mesh_info | ( | LG_Mesh * | mesh, |
| int | show_first_n | ||
| ) |
| char * lg_replace_file_extension | ( | const char * | path, |
| const char * | new_ext | ||
| ) |
Replace file extension with another extension, ie 'bla_bla/hello.old_ext' -> 'bla_bla/hello.new_ext'
Extension must not include leading dot
Remove trailing dot if new_ext is empty string
Returned new path must be freed after use (dynamically allocated)
| path | |
| new_ext |