BsTransientMesh.cpp 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #include "BsTransientMesh.h"
  2. #include "BsVertexData.h"
  3. #include "BsMeshHeap.h"
  4. namespace BansheeEngine
  5. {
  6. TransientMesh::TransientMesh(const MeshHeapPtr& parentHeap, UINT32 id, UINT32 numVertices, UINT32 numIndices, DrawOperationType drawOp)
  7. :MeshBase(numVertices, numIndices, drawOp), mParentHeap(parentHeap), mId(id), mIsDestroyed(false)
  8. {
  9. mRenderData = bs_shared_ptr<MeshRenderData>(nullptr, nullptr, SubMesh(), 0, std::bind(&TransientMesh::_notifyUsedOnGPU, this));
  10. }
  11. TransientMesh::~TransientMesh()
  12. {
  13. if(!mIsDestroyed)
  14. {
  15. TransientMeshPtr meshPtr = std::static_pointer_cast<TransientMesh>(getThisPtr());
  16. mParentHeap->dealloc(meshPtr);
  17. }
  18. mRenderData->_markAsInvalid();
  19. }
  20. void TransientMesh::writeSubresource(UINT32 subresourceIdx, const GpuResourceData& data, bool discardEntireBuffer)
  21. {
  22. BS_EXCEPT(InvalidStateException, "Updating is not supported on a transient mesh.");
  23. }
  24. void TransientMesh::readSubresource(UINT32 subresourceIdx, GpuResourceData& data)
  25. {
  26. BS_EXCEPT(InvalidStateException, "Reading is not supported on a transient mesh.");
  27. }
  28. std::shared_ptr<VertexData> TransientMesh::_getVertexData() const
  29. {
  30. return mParentHeap->_getVertexData();
  31. }
  32. IndexBufferPtr TransientMesh::_getIndexBuffer() const
  33. {
  34. return mParentHeap->_getIndexBuffer();
  35. }
  36. UINT32 TransientMesh::_getVertexOffset() const
  37. {
  38. return mParentHeap->getVertexOffset(mId);
  39. }
  40. UINT32 TransientMesh::_getIndexOffset() const
  41. {
  42. return mParentHeap->getIndexOffset(mId);
  43. }
  44. void TransientMesh::_notifyUsedOnGPU()
  45. {
  46. mParentHeap->notifyUsedOnGPU(mId);
  47. }
  48. void TransientMesh::_updateRenderData()
  49. {
  50. mRenderData->updateData(mParentHeap->_getVertexData(), mParentHeap->_getIndexBuffer(),
  51. SubMesh(mParentHeap->getIndexOffset(mId), getNumIndices(), getSubMesh(0).drawOp),
  52. mParentHeap->getVertexOffset(mId));
  53. }
  54. }