BsHardwareBufferManager.cpp 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "BsHardwareBufferManager.h"
  4. #include "BsVertexData.h"
  5. #include "BsGpuBuffer.h"
  6. #include "BsVertexDeclaration.h"
  7. #include "BsGpuParamBlockBuffer.h"
  8. #include "BsVertexDataDesc.h"
  9. namespace BansheeEngine
  10. {
  11. HardwareBufferManager::HardwareBufferManager()
  12. {
  13. }
  14. HardwareBufferManager::~HardwareBufferManager()
  15. {
  16. }
  17. SPtr<VertexDeclaration> HardwareBufferManager::createVertexDeclaration(const SPtr<VertexDataDesc>& desc)
  18. {
  19. VertexDeclaration* decl = new (bs_alloc<VertexDeclaration>()) VertexDeclaration(desc->createElements());
  20. SPtr<VertexDeclaration> declPtr = bs_core_ptr<VertexDeclaration>(decl);
  21. declPtr->_setThisPtr(declPtr);
  22. declPtr->initialize();
  23. return declPtr;
  24. }
  25. SPtr<VertexBuffer> HardwareBufferManager::createVertexBuffer(UINT32 vertexSize, UINT32 numVerts, GpuBufferUsage usage, bool streamOut)
  26. {
  27. assert (numVerts > 0);
  28. SPtr<VertexBuffer> vbuf = bs_core_ptr<VertexBuffer>(new (bs_alloc<VertexBuffer>()) VertexBuffer(vertexSize, numVerts, usage, streamOut));
  29. vbuf->_setThisPtr(vbuf);
  30. vbuf->initialize();
  31. return vbuf;
  32. }
  33. SPtr<IndexBuffer> HardwareBufferManager::createIndexBuffer(IndexType itype, UINT32 numIndices, GpuBufferUsage usage)
  34. {
  35. assert (numIndices > 0);
  36. SPtr<IndexBuffer> ibuf = bs_core_ptr<IndexBuffer>(new (bs_alloc<IndexBuffer>()) IndexBuffer(itype, numIndices, usage));
  37. ibuf->_setThisPtr(ibuf);
  38. ibuf->initialize();
  39. return ibuf;
  40. }
  41. SPtr<GpuParamBlockBuffer> HardwareBufferManager::createGpuParamBlockBuffer(UINT32 size, GpuParamBlockUsage usage)
  42. {
  43. SPtr<GpuParamBlockBuffer> paramBlockPtr = bs_core_ptr<GpuParamBlockBuffer>(new (bs_alloc<GpuParamBlockBuffer>()) GpuParamBlockBuffer(size, usage));
  44. paramBlockPtr->_setThisPtr(paramBlockPtr);
  45. paramBlockPtr->initialize();
  46. return paramBlockPtr;
  47. }
  48. SPtr<GpuBuffer> HardwareBufferManager::createGpuBuffer(UINT32 elementCount, UINT32 elementSize,
  49. GpuBufferType type, GpuBufferFormat format, GpuBufferUsage usage, bool randomGpuWrite, bool useCounter)
  50. {
  51. SPtr<GpuBuffer> gbuf = bs_core_ptr<GpuBuffer>(new (bs_alloc<GpuBuffer>())
  52. GpuBuffer(elementCount, elementSize, type, format, usage, randomGpuWrite, useCounter));
  53. gbuf->_setThisPtr(gbuf);
  54. gbuf->initialize();
  55. return gbuf;
  56. }
  57. SPtr<IndexBufferCore> HardwareBufferCoreManager::createIndexBuffer(IndexType itype, UINT32 numIndexes, GpuBufferUsage usage)
  58. {
  59. assert(numIndexes > 0);
  60. SPtr<IndexBufferCore> ibuf = createIndexBufferInternal(itype, numIndexes, usage);
  61. ibuf->initialize();
  62. return ibuf;
  63. }
  64. SPtr<VertexBufferCore> HardwareBufferCoreManager::createVertexBuffer(UINT32 vertexSize, UINT32 numVerts, GpuBufferUsage usage, bool streamOut)
  65. {
  66. assert(numVerts > 0);
  67. SPtr<VertexBufferCore> vbuf = createVertexBufferInternal(vertexSize, numVerts, usage, streamOut);
  68. vbuf->initialize();
  69. return vbuf;
  70. }
  71. SPtr<VertexDeclarationCore> HardwareBufferCoreManager::createVertexDeclaration(const SPtr<VertexDataDesc>& desc)
  72. {
  73. SPtr<VertexDeclarationCore> declPtr = createVertexDeclarationInternal(desc->createElements());
  74. declPtr->initialize();
  75. return declPtr;
  76. }
  77. SPtr<VertexDeclarationCore> HardwareBufferCoreManager::createVertexDeclaration(const List<VertexElement>& elements)
  78. {
  79. SPtr<VertexDeclarationCore> declPtr = createVertexDeclarationInternal(elements);
  80. declPtr->initialize();
  81. return declPtr;
  82. }
  83. SPtr<GpuParamBlockBufferCore> HardwareBufferCoreManager::createGpuParamBlockBuffer(UINT32 size, GpuParamBlockUsage usage)
  84. {
  85. SPtr<GpuParamBlockBufferCore> paramBlockPtr = createGpuParamBlockBufferInternal(size, usage);
  86. paramBlockPtr->initialize();
  87. return paramBlockPtr;
  88. }
  89. SPtr<GpuBufferCore> HardwareBufferCoreManager::createGpuBuffer(UINT32 elementCount, UINT32 elementSize,
  90. GpuBufferType type, GpuBufferFormat format, GpuBufferUsage usage, bool randomGpuWrite, bool useCounter)
  91. {
  92. SPtr<GpuBufferCore> gbuf = createGpuBufferInternal(elementCount, elementSize, type, format, usage, randomGpuWrite,
  93. useCounter);
  94. gbuf->initialize();
  95. return gbuf;
  96. }
  97. SPtr<VertexDeclarationCore> HardwareBufferCoreManager::createVertexDeclarationInternal(const List<VertexElement>& elements)
  98. {
  99. VertexDeclarationCore* decl = new (bs_alloc<VertexDeclarationCore>()) VertexDeclarationCore(elements);
  100. SPtr<VertexDeclarationCore> ret = bs_shared_ptr<VertexDeclarationCore>(decl);
  101. ret->_setThisPtr(ret);
  102. return ret;
  103. }
  104. }