casset.h 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. /**
  2. *** :: Asset ::
  3. ***
  4. **** An asset can be considered an external file used in the engine.
  5. *** Assets are identified using their file system path.
  6. ***
  7. *** texture* blah = asset_get(P("./textures/blah.dds"));
  8. ***
  9. *** It is possible to register load and unload functions
  10. *** for type via their file extensions.
  11. ***
  12. *** asset_handler(renderable, "obj", obj_load_file, renderable_delete);
  13. ***
  14. *** Please do not store raw pointers to assets.
  15. *** Use an 'asset_hndl' value instead. It is a kind
  16. *** of smart pointer which will not become invalidated
  17. *** when assets are reloaded or moved around.
  18. ***
  19. **/
  20. #ifndef casset_h
  21. #define casset_h
  22. #include "cengine.h"
  23. typedef void asset;
  24. /* Storable Asset Handle */
  25. typedef struct {
  26. fpath path;
  27. asset* ptr;
  28. uint32_t timestamp;
  29. } asset_hndl;
  30. asset_hndl asset_hndl_null(void);
  31. asset_hndl asset_hndl_new(fpath path);
  32. asset_hndl asset_hndl_new_load(fpath path);
  33. asset_hndl asset_hndl_new_ptr(asset* as);
  34. bool asset_hndl_isnull(asset_hndl* ah);
  35. fpath asset_hndl_path(asset_hndl* ah);
  36. asset* asset_hndl_ptr(asset_hndl* ah);
  37. bool asset_hndl_eq(asset_hndl* ah0, asset_hndl* ah1);
  38. void asset_cache_flush(void);
  39. /* Init and Finish operations */
  40. void asset_init(void);
  41. void asset_finish(void);
  42. /* Map a variable such as '$CORANGE' to a path string */
  43. void asset_add_path_variable(fpath variable, fpath mapping);
  44. fpath asset_map_filename(fpath filename);
  45. fpath asset_unmap_filename(fpath filename);
  46. /* Create handler for asset type. Requires type, file extension, and load/unload functions. */
  47. #define asset_handler(type, extension, loader, deleter) \
  48. asset_handler_cast(typeid(type), extension, \
  49. (asset*(*)(const char*))loader , \
  50. (asset(*)(void*))deleter)
  51. void asset_handler_cast(
  52. type_id type, const char* extension,
  53. asset* asset_loader(const char* filename) ,
  54. void asset_deleter(asset* asset) );
  55. /* Load/Reload/Unload assets at path or folder */
  56. void file_load(fpath filename);
  57. void file_unload(fpath filename);
  58. void file_reload(fpath filename);
  59. bool file_isloaded(fpath path);
  60. bool file_exists(fpath path);
  61. void folder_load(fpath folder);
  62. void folder_unload(fpath folder);
  63. void folder_reload(fpath folder);
  64. void folder_load_recursive(fpath folder);
  65. asset* asset_get_load(fpath path);
  66. asset* asset_get(fpath path);
  67. #define asset_get_as(path, type) ((type*)asset_get_as_type(path, typeid(type)))
  68. asset* asset_get_as_type(fpath path, type_id type);
  69. /* Reload all assets of a given type */
  70. #define asset_reload_type(type) asset_reload_type_id(typeid(type))
  71. void asset_reload_type_id(type_id type);
  72. void asset_reload_all(void);
  73. /* Get path or typename of asset at ptr */
  74. char* asset_ptr_path(asset* a);
  75. char* asset_ptr_typename(asset* a);
  76. #endif