2
0

GrObject.h 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  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/Gr/Common.h>
  7. #include <AnKi/Util/Atomic.h>
  8. #include <AnKi/Util/NonCopyable.h>
  9. namespace anki
  10. {
  11. /// @addtogroup graphics
  12. /// @{
  13. /// Graphics object type.
  14. enum class GrObjectType : U8
  15. {
  16. BUFFER,
  17. COMMAND_BUFFER,
  18. FRAMEBUFFER,
  19. OCCLUSION_QUERY,
  20. TIMESTAMP_QUERY,
  21. SAMPLER,
  22. SHADER,
  23. TEXTURE,
  24. TEXTURE_VIEW,
  25. SHADER_PROGRAM,
  26. FENCE,
  27. RENDER_GRAPH,
  28. ACCELERATION_STRUCTURE,
  29. COUNT,
  30. FIRST = 0
  31. };
  32. /// Base of all graphics objects.
  33. class GrObject : public NonCopyable
  34. {
  35. public:
  36. GrObject(GrManager* manager, GrObjectType type, CString name);
  37. virtual ~GrObject();
  38. GrObjectType getType() const
  39. {
  40. return m_type;
  41. }
  42. GrManager& getManager()
  43. {
  44. return *m_manager;
  45. }
  46. const GrManager& getManager() const
  47. {
  48. return *m_manager;
  49. }
  50. GrAllocator<U8> getAllocator() const;
  51. Atomic<I32>& getRefcount()
  52. {
  53. return m_refcount;
  54. }
  55. /// A unique identifier for caching objects.
  56. U64 getUuid() const
  57. {
  58. return m_uuid;
  59. }
  60. /// Get its name.
  61. CString getName() const
  62. {
  63. return m_name;
  64. }
  65. private:
  66. GrManager* m_manager;
  67. CString m_name;
  68. U64 m_uuid;
  69. Atomic<I32> m_refcount;
  70. GrObjectType m_type;
  71. };
  72. /// @}
  73. } // end namespace anki