BsTransientMesh.cpp 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  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. }
  10. TransientMesh::~TransientMesh()
  11. {
  12. if(!mIsDestroyed)
  13. {
  14. TransientMeshPtr meshPtr = std::static_pointer_cast<TransientMesh>(getThisPtr());
  15. mParentHeap->dealloc(meshPtr);
  16. }
  17. }
  18. void TransientMesh::writeSubresource(UINT32 subresourceIdx, const GpuResourceData& data, bool discardEntireBuffer)
  19. {
  20. BS_EXCEPT(InvalidStateException, "Updating is not supported on a transient mesh.");
  21. }
  22. void TransientMesh::readSubresource(UINT32 subresourceIdx, GpuResourceData& data)
  23. {
  24. BS_EXCEPT(InvalidStateException, "Reading is not supported on a transient mesh.");
  25. }
  26. std::shared_ptr<VertexData> TransientMesh::_getVertexData() const
  27. {
  28. return mParentHeap->_getVertexData();
  29. }
  30. IndexBufferPtr TransientMesh::_getIndexBuffer() const
  31. {
  32. return mParentHeap->_getIndexBuffer();
  33. }
  34. UINT32 TransientMesh::_getVertexOffset() const
  35. {
  36. return mParentHeap->getVertexOffset(mId);
  37. }
  38. UINT32 TransientMesh::_getIndexOffset() const
  39. {
  40. return mParentHeap->getIndexOffset(mId);
  41. }
  42. void TransientMesh::_notifyUsedOnGPU()
  43. {
  44. mParentHeap->notifyUsedOnGPU(mId);
  45. }
  46. void TransientMesh::_updateProxy()
  47. {
  48. mMeshProxy.updateData(mParentHeap->_getVertexData(), mParentHeap->_getIndexBuffer(),
  49. SubMesh(mParentHeap->getIndexOffset(mId), getNumIndices(), getSubMesh(0).drawOp));
  50. }
  51. }