BsHardwareBufferManager.cpp 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  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 VertexDeclaration::VertexElementList& elements)
  15. {
  16. VertexDeclarationPtr decl = createVertexDeclarationImpl(elements);
  17. decl->_setThisPtr(decl);
  18. decl->initialize();
  19. return decl;
  20. }
  21. VertexBufferPtr HardwareBufferManager::createVertexBuffer(UINT32 vertexSize, UINT32 numVerts, GpuBufferUsage usage, bool streamOut)
  22. {
  23. assert (numVerts > 0);
  24. VertexBufferPtr vbuf = bs_core_ptr<VertexBuffer, GenAlloc>(new (bs_alloc<VertexBuffer>()) VertexBuffer(vertexSize, numVerts, usage, streamOut));
  25. vbuf->_setThisPtr(vbuf);
  26. vbuf->initialize();
  27. return vbuf;
  28. }
  29. IndexBufferPtr HardwareBufferManager::createIndexBuffer(IndexType itype, UINT32 numIndexes, GpuBufferUsage usage)
  30. {
  31. assert (numIndexes > 0);
  32. IndexBufferPtr ibuf = bs_core_ptr<IndexBuffer, GenAlloc>(new (bs_alloc<IndexBuffer>()) IndexBuffer(itype, numIndexes, usage));
  33. ibuf->_setThisPtr(ibuf);
  34. ibuf->initialize();
  35. return ibuf;
  36. }
  37. GpuParamBlockBufferPtr HardwareBufferManager::createGpuParamBlockBuffer(UINT32 size, GpuParamBlockUsage usage)
  38. {
  39. GpuParamBlockBufferPtr paramBlockPtr = createGpuParamBlockBufferImpl();
  40. paramBlockPtr->_setThisPtr(paramBlockPtr);
  41. paramBlockPtr->initialize(size, usage);
  42. return paramBlockPtr;
  43. }
  44. GpuBufferPtr HardwareBufferManager::createGpuBuffer(UINT32 elementCount, UINT32 elementSize,
  45. GpuBufferType type, GpuBufferUsage usage, bool randomGpuWrite, bool useCounter)
  46. {
  47. GpuBufferPtr gbuf = createGpuBufferImpl(elementCount, elementSize, type, usage, randomGpuWrite, useCounter);
  48. gbuf->_setThisPtr(gbuf);
  49. gbuf->initialize();
  50. return gbuf;
  51. }
  52. VertexDeclarationPtr HardwareBufferManager::createVertexDeclarationImpl(const VertexDeclaration::VertexElementList& elements)
  53. {
  54. return bs_core_ptr<VertexDeclaration, PoolAlloc>(new (bs_alloc<VertexDeclaration, PoolAlloc>()) VertexDeclaration(elements));
  55. }
  56. SPtr<IndexBufferCore> HardwareBufferCoreManager::createIndexBuffer(IndexType itype, UINT32 numIndexes, GpuBufferUsage usage)
  57. {
  58. assert(numIndexes > 0);
  59. SPtr<IndexBufferCore> ibuf = createIndexBufferImpl(itype, numIndexes, usage);
  60. ibuf->initialize();
  61. return ibuf;
  62. }
  63. SPtr<VertexBufferCore> HardwareBufferCoreManager::createVertexBuffer(UINT32 vertexSize, UINT32 numVerts, GpuBufferUsage usage, bool streamOut)
  64. {
  65. assert(numVerts > 0);
  66. SPtr<VertexBufferCore> vbuf = createVertexBufferImpl(vertexSize, numVerts, usage, streamOut);
  67. vbuf->initialize();
  68. return vbuf;
  69. }
  70. }