BsHardwareBufferManager.cpp 4.0 KB

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