BsIndexBuffer.cpp 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "RenderAPI/BsIndexBuffer.h"
  4. #include "Managers/BsHardwareBufferManager.h"
  5. #include "RenderAPI/BsRenderAPI.h"
  6. namespace bs
  7. {
  8. UINT32 calcIndexSize(IndexType type)
  9. {
  10. switch (type)
  11. {
  12. case IT_16BIT:
  13. return sizeof(unsigned short);
  14. default:
  15. case IT_32BIT:
  16. return sizeof(unsigned int);
  17. }
  18. }
  19. IndexBufferProperties::IndexBufferProperties(IndexType idxType, UINT32 numIndices)
  20. :mIndexType(idxType), mNumIndices(numIndices), mIndexSize(calcIndexSize(idxType))
  21. { }
  22. IndexBuffer::IndexBuffer(const INDEX_BUFFER_DESC& desc)
  23. :mProperties(desc.indexType, desc.numIndices), mUsage(desc.usage)
  24. {
  25. }
  26. SPtr<ct::IndexBuffer> IndexBuffer::getCore() const
  27. {
  28. return std::static_pointer_cast<ct::IndexBuffer>(mCoreSpecific);
  29. }
  30. SPtr<ct::CoreObject> IndexBuffer::createCore() const
  31. {
  32. INDEX_BUFFER_DESC desc;
  33. desc.indexType = mProperties.mIndexType;
  34. desc.numIndices = mProperties.mNumIndices;
  35. desc.usage = mUsage;
  36. return ct::HardwareBufferManager::instance().createIndexBufferInternal(desc);
  37. }
  38. SPtr<IndexBuffer> IndexBuffer::create(const INDEX_BUFFER_DESC& desc)
  39. {
  40. return HardwareBufferManager::instance().createIndexBuffer(desc);
  41. }
  42. namespace ct
  43. {
  44. IndexBuffer::IndexBuffer(const INDEX_BUFFER_DESC& desc, GpuDeviceFlags deviceMask)
  45. :HardwareBuffer(calcIndexSize(desc.indexType) * desc.numIndices), mProperties(desc.indexType, desc.numIndices)
  46. { }
  47. SPtr<IndexBuffer> IndexBuffer::create(const INDEX_BUFFER_DESC& desc, GpuDeviceFlags deviceMask)
  48. {
  49. return HardwareBufferManager::instance().createIndexBuffer(desc, deviceMask);
  50. }
  51. }
  52. }