BsIndexBuffer.h 3.2 KB

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