BsHardwareBufferManager.cpp 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  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. namespace BansheeEngine
  9. {
  10. HardwareBufferManager::HardwareBufferManager()
  11. {
  12. }
  13. HardwareBufferManager::~HardwareBufferManager()
  14. {
  15. }
  16. VertexDeclarationPtr HardwareBufferManager::createVertexDeclaration(const List<VertexElement>& elements)
  17. {
  18. VertexDeclaration* decl = new (bs_alloc<VertexDeclaration>()) VertexDeclaration(elements);
  19. VertexDeclarationPtr declPtr = bs_core_ptr<VertexDeclaration>(decl);
  20. declPtr->_setThisPtr(declPtr);
  21. declPtr->initialize();
  22. return declPtr;
  23. }
  24. VertexBufferPtr HardwareBufferManager::createVertexBuffer(UINT32 vertexSize, UINT32 numVerts, GpuBufferUsage usage, bool streamOut)
  25. {
  26. assert (numVerts > 0);
  27. VertexBufferPtr vbuf = bs_core_ptr<VertexBuffer>(new (bs_alloc<VertexBuffer>()) VertexBuffer(vertexSize, numVerts, usage, streamOut));
  28. vbuf->_setThisPtr(vbuf);
  29. vbuf->initialize();
  30. return vbuf;
  31. }
  32. IndexBufferPtr HardwareBufferManager::createIndexBuffer(IndexType itype, UINT32 numIndexes, GpuBufferUsage usage)
  33. {
  34. assert (numIndexes > 0);
  35. IndexBufferPtr ibuf = bs_core_ptr<IndexBuffer>(new (bs_alloc<IndexBuffer>()) IndexBuffer(itype, numIndexes, usage));
  36. ibuf->_setThisPtr(ibuf);
  37. ibuf->initialize();
  38. return ibuf;
  39. }
  40. GpuParamBlockBufferPtr HardwareBufferManager::createGpuParamBlockBuffer(UINT32 size, GpuParamBlockUsage usage)
  41. {
  42. GpuParamBlockBufferPtr paramBlockPtr = bs_core_ptr<GpuParamBlockBuffer>(new (bs_alloc<GpuParamBlockBuffer>()) GpuParamBlockBuffer(size, usage));
  43. paramBlockPtr->_setThisPtr(paramBlockPtr);
  44. paramBlockPtr->initialize();
  45. return paramBlockPtr;
  46. }
  47. GpuBufferPtr HardwareBufferManager::createGpuBuffer(UINT32 elementCount, UINT32 elementSize,
  48. GpuBufferType type, GpuBufferUsage usage, bool randomGpuWrite, bool useCounter)
  49. {
  50. GpuBufferPtr gbuf = bs_core_ptr<GpuBuffer>(new (bs_alloc<GpuBuffer>()) GpuBuffer(elementCount, elementSize, type, usage, randomGpuWrite, useCounter));
  51. gbuf->_setThisPtr(gbuf);
  52. gbuf->initialize();
  53. return gbuf;
  54. }
  55. SPtr<IndexBufferCore> HardwareBufferCoreManager::createIndexBuffer(IndexType itype, UINT32 numIndexes, GpuBufferUsage usage)
  56. {
  57. assert(numIndexes > 0);
  58. SPtr<IndexBufferCore> ibuf = createIndexBufferInternal(itype, numIndexes, usage);
  59. ibuf->initialize();
  60. return ibuf;
  61. }
  62. SPtr<VertexBufferCore> HardwareBufferCoreManager::createVertexBuffer(UINT32 vertexSize, UINT32 numVerts, GpuBufferUsage usage, bool streamOut)
  63. {
  64. assert(numVerts > 0);
  65. SPtr<VertexBufferCore> vbuf = createVertexBufferInternal(vertexSize, numVerts, usage, streamOut);
  66. vbuf->initialize();
  67. return vbuf;
  68. }
  69. SPtr<VertexDeclarationCore> HardwareBufferCoreManager::createVertexDeclaration(const List<VertexElement>& elements)
  70. {
  71. SPtr<VertexDeclarationCore> declPtr = createVertexDeclarationInternal(elements);
  72. declPtr->initialize();
  73. return declPtr;
  74. }
  75. SPtr<GpuParamBlockBufferCore> HardwareBufferCoreManager::createGpuParamBlockBuffer(UINT32 size, GpuParamBlockUsage usage)
  76. {
  77. SPtr<GpuParamBlockBufferCore> paramBlockPtr = createGpuParamBlockBufferInternal(size, usage);
  78. paramBlockPtr->initialize();
  79. return paramBlockPtr;
  80. }
  81. SPtr<GpuBufferCore> HardwareBufferCoreManager::createGpuBuffer(UINT32 elementCount, UINT32 elementSize,
  82. GpuBufferType type, GpuBufferUsage usage, bool randomGpuWrite, bool useCounter)
  83. {
  84. SPtr<GpuBufferCore> gbuf = createGpuBufferInternal(elementCount, elementSize, type, usage, randomGpuWrite, useCounter);
  85. gbuf->initialize();
  86. return gbuf;
  87. }
  88. SPtr<VertexDeclarationCore> HardwareBufferCoreManager::createVertexDeclarationInternal(const List<VertexElement>& elements)
  89. {
  90. VertexDeclarationCore* decl = new (bs_alloc<VertexDeclarationCore>()) VertexDeclarationCore(elements);
  91. SPtr<VertexDeclarationCore> ret = bs_shared_ptr<VertexDeclarationCore>(decl);
  92. ret->_setThisPtr(ret);
  93. return ret;
  94. }
  95. }