Common.h 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. // Copyright (C) 2009-2021, Panagiotis Christopoulos Charitos and contributors.
  2. // All rights reserved.
  3. // Code licensed under the BSD License.
  4. // http://www.anki3d.org/LICENSE
  5. #pragma once
  6. #include <AnKi/Util/Allocator.h>
  7. #include <AnKi/Util/DynamicArray.h>
  8. #include <AnKi/Util/String.h>
  9. #include <AnKi/Util/Ptr.h>
  10. #include <AnKi/Gr/Enums.h>
  11. #include <AnKi/Shaders/Include/ModelTypes.h>
  12. namespace anki
  13. {
  14. // Forward
  15. class GrManager;
  16. class ResourceManager;
  17. class ResourceFilesystem;
  18. template<typename Type>
  19. class ResourcePointer;
  20. class TransferGpuAllocatorHandle;
  21. /// @addtogroup resource
  22. /// @{
  23. #define ANKI_RESOURCE_LOGI(...) ANKI_LOG("RSRC", NORMAL, __VA_ARGS__)
  24. #define ANKI_RESOURCE_LOGE(...) ANKI_LOG("RSRC", ERROR, __VA_ARGS__)
  25. #define ANKI_RESOURCE_LOGW(...) ANKI_LOG("RSRC", WARNING, __VA_ARGS__)
  26. #define ANKI_RESOURCE_LOGF(...) ANKI_LOG("RSRC", FATAL, __VA_ARGS__)
  27. /// Deleter for ResourcePtr.
  28. template<typename T>
  29. class ResourcePtrDeleter
  30. {
  31. public:
  32. void operator()(T* ptr);
  33. };
  34. /// Smart pointer for resources.
  35. template<typename T>
  36. using ResourcePtr = IntrusivePtr<T, ResourcePtrDeleter<T>>;
  37. // NOTE: Add resources in 3 places
  38. #define ANKI_INSTANTIATE_RESOURCE(rsrc_, name_) \
  39. class rsrc_; \
  40. using name_ = ResourcePtr<rsrc_>;
  41. #define ANKI_INSTANSIATE_RESOURCE_DELIMITER()
  42. #include <AnKi/Resource/InstantiationMacros.h>
  43. #undef ANKI_INSTANTIATE_RESOURCE
  44. #undef ANKI_INSTANSIATE_RESOURCE_DELIMITER
  45. template<typename T>
  46. using ResourceAllocator = HeapAllocator<T>;
  47. template<typename T>
  48. using TempResourceAllocator = StackAllocator<T>;
  49. /// An alias that denotes a ResourceFilesystem path.
  50. using ResourceFilename = CString;
  51. /// @}
  52. } // end namespace anki