BsD3D11VertexBuffer.cpp 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #include "BsD3D11VertexBuffer.h"
  2. #include "BsD3D11Device.h"
  3. #include "BsRenderStats.h"
  4. namespace BansheeEngine
  5. {
  6. D3D11VertexBufferCore::D3D11VertexBufferCore(D3D11Device& device, UINT32 vertexSize, UINT32 numVertices, GpuBufferUsage usage, bool streamOut)
  7. :VertexBufferCore(vertexSize, numVertices, usage, streamOut), mDevice(device), mStreamOut(streamOut), mBuffer(nullptr)
  8. { }
  9. void* D3D11VertexBufferCore::lockImpl(UINT32 offset, UINT32 length, GpuLockOptions options)
  10. {
  11. #if BS_PROFILING_ENABLED
  12. if (options == GBL_READ_ONLY || options == GBL_READ_WRITE)
  13. {
  14. BS_INC_RENDER_STAT_CAT(ResRead, RenderStatObject_VertexBuffer);
  15. }
  16. if (options == GBL_READ_WRITE || options == GBL_WRITE_ONLY || options == GBL_WRITE_ONLY_DISCARD || options == GBL_WRITE_ONLY_NO_OVERWRITE)
  17. {
  18. BS_INC_RENDER_STAT_CAT(ResWrite, RenderStatObject_VertexBuffer);
  19. }
  20. #endif
  21. return mBuffer->lock(offset, length, options);
  22. }
  23. void D3D11VertexBufferCore::unlockImpl()
  24. {
  25. mBuffer->unlock();
  26. }
  27. void D3D11VertexBufferCore::readData(UINT32 offset, UINT32 length, void* dest)
  28. {
  29. mBuffer->readData(offset, length, dest);
  30. BS_INC_RENDER_STAT_CAT(ResRead, RenderStatObject_VertexBuffer);
  31. }
  32. void D3D11VertexBufferCore::writeData(UINT32 offset, UINT32 length, const void* source, BufferWriteType writeFlags)
  33. {
  34. mBuffer->writeData(offset, length, source, writeFlags);
  35. BS_INC_RENDER_STAT_CAT(ResWrite, RenderStatObject_VertexBuffer);
  36. }
  37. void D3D11VertexBufferCore::copyData(HardwareBuffer& srcBuffer, UINT32 srcOffset,
  38. UINT32 dstOffset, UINT32 length, bool discardWholeBuffer)
  39. {
  40. mBuffer->copyData(srcBuffer, srcOffset, dstOffset, length, discardWholeBuffer);
  41. }
  42. void D3D11VertexBufferCore::initialize()
  43. {
  44. mBuffer = bs_new<D3D11HardwareBuffer, PoolAlloc>(D3D11HardwareBuffer::BT_VERTEX,
  45. mUsage, 1, mSizeInBytes, std::ref(mDevice), mSystemMemory, mStreamOut);
  46. BS_INC_RENDER_STAT_CAT(ResCreated, RenderStatObject_VertexBuffer);
  47. VertexBufferCore::initialize();
  48. }
  49. void D3D11VertexBufferCore::destroy()
  50. {
  51. if(mBuffer != nullptr)
  52. bs_delete<PoolAlloc>(mBuffer);
  53. BS_INC_RENDER_STAT_CAT(ResDestroyed, RenderStatObject_VertexBuffer);
  54. VertexBufferCore::destroy();
  55. }
  56. }