Common.h 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. // Copyright (C) 2009-2022, 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. // Forward
  14. class GrManager;
  15. class ResourceManager;
  16. class ResourceFilesystem;
  17. template<typename Type>
  18. class ResourcePointer;
  19. class TransferGpuAllocatorHandle;
  20. /// @addtogroup resource
  21. /// @{
  22. #define ANKI_RESOURCE_LOGI(...) ANKI_LOG("RSRC", NORMAL, __VA_ARGS__)
  23. #define ANKI_RESOURCE_LOGE(...) ANKI_LOG("RSRC", ERROR, __VA_ARGS__)
  24. #define ANKI_RESOURCE_LOGW(...) ANKI_LOG("RSRC", WARNING, __VA_ARGS__)
  25. #define ANKI_RESOURCE_LOGF(...) ANKI_LOG("RSRC", FATAL, __VA_ARGS__)
  26. /// Deleter for ResourcePtr.
  27. template<typename T>
  28. class ResourcePtrDeleter
  29. {
  30. public:
  31. void operator()(T* ptr);
  32. };
  33. /// Smart pointer for resources.
  34. template<typename T>
  35. using ResourcePtr = IntrusivePtr<T, ResourcePtrDeleter<T>>;
  36. // NOTE: Add resources in 3 places
  37. #define ANKI_INSTANTIATE_RESOURCE(rsrc_, name_) \
  38. class rsrc_; \
  39. using name_ = ResourcePtr<rsrc_>;
  40. #define ANKI_INSTANSIATE_RESOURCE_DELIMITER()
  41. #include <AnKi/Resource/InstantiationMacros.h>
  42. #undef ANKI_INSTANTIATE_RESOURCE
  43. #undef ANKI_INSTANSIATE_RESOURCE_DELIMITER
  44. template<typename T>
  45. using ResourceAllocator = HeapAllocator<T>;
  46. template<typename T>
  47. using TempResourceAllocator = StackAllocator<T>;
  48. /// An alias that denotes a ResourceFilesystem path.
  49. using ResourceFilename = CString;
  50. /// @}
  51. } // end namespace anki