BsIndexBuffer.h 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #pragma once
  4. #include "BsCorePrerequisites.h"
  5. #include "RenderAPI/BsHardwareBuffer.h"
  6. #include "CoreThread/BsCoreObject.h"
  7. namespace bs
  8. {
  9. /** @addtogroup RenderAPI
  10. * @{
  11. */
  12. /** Descriptor structure used for initialization of an IndexBuffer. */
  13. struct INDEX_BUFFER_DESC
  14. {
  15. IndexType indexType; /**< Index type, determines the size of a single index. */
  16. UINT32 numIndices; /**< Number of indices can buffer can hold. */
  17. GpuBufferUsage usage = GBU_STATIC; /**< Usage that tells the hardware how will be buffer be used. */
  18. };
  19. /** Contains information about an index buffer. */
  20. class BS_CORE_EXPORT IndexBufferProperties
  21. {
  22. public:
  23. IndexBufferProperties(IndexType idxType, UINT32 numIndexes);
  24. /** Returns the type of indices stored. */
  25. IndexType getType() const { return mIndexType; }
  26. /** Returns the number of indices this buffer can hold. */
  27. UINT32 getNumIndices() const { return mNumIndices; }
  28. /** Returns the size of a single index in bytes. */
  29. UINT32 getIndexSize() const { return mIndexSize; }
  30. protected:
  31. friend class IndexBuffer;
  32. friend class ct::IndexBuffer;
  33. IndexType mIndexType;
  34. UINT32 mNumIndices;
  35. UINT32 mIndexSize;
  36. };
  37. /** Hardware buffer that hold indices that reference vertices in a vertex buffer. */
  38. class BS_CORE_EXPORT IndexBuffer : public CoreObject
  39. {
  40. public:
  41. virtual ~IndexBuffer() { }
  42. /** Returns information about the index buffer. */
  43. const IndexBufferProperties& getProperties() const { return mProperties; }
  44. /**
  45. * Retrieves a core implementation of an index buffer usable only from the core thread.
  46. *
  47. * @note Core thread only.
  48. */
  49. SPtr<ct::IndexBuffer> getCore() const;
  50. /** @copydoc HardwareBufferManager::createIndexBuffer */
  51. static SPtr<IndexBuffer> create(const INDEX_BUFFER_DESC& desc);
  52. protected:
  53. friend class HardwareBufferManager;
  54. IndexBuffer(const INDEX_BUFFER_DESC& desc);
  55. /** @copydoc CoreObject::createCore */
  56. virtual SPtr<ct::CoreObject> createCore() const;
  57. IndexBufferProperties mProperties;
  58. GpuBufferUsage mUsage;
  59. };
  60. /** @} */
  61. namespace ct
  62. {
  63. /** @addtogroup RenderAPI-Internal
  64. * @{
  65. */
  66. /** Core thread specific implementation of an bs::IndexBuffer. */
  67. class BS_CORE_EXPORT IndexBuffer : public CoreObject, public HardwareBuffer
  68. {
  69. public:
  70. IndexBuffer(const INDEX_BUFFER_DESC& desc, GpuDeviceFlags deviceMask = GDF_DEFAULT);
  71. virtual ~IndexBuffer() { }
  72. /** Returns information about the index buffer. */
  73. const IndexBufferProperties& getProperties() const { return mProperties; }
  74. /** @copydoc HardwareBufferManager::createIndexBuffer */
  75. static SPtr<IndexBuffer> create(const INDEX_BUFFER_DESC& desc, GpuDeviceFlags deviceMask = GDF_DEFAULT);
  76. protected:
  77. IndexBufferProperties mProperties;
  78. };
  79. /** @} */
  80. }
  81. }