BsTransientMesh.cpp 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. #include "BsTransientMesh.h"
  2. #include "BsVertexData.h"
  3. #include "BsBounds.h"
  4. #include "BsMeshHeap.h"
  5. namespace BansheeEngine
  6. {
  7. TransientMesh::TransientMesh(const MeshHeapPtr& parentHeap, UINT32 id, UINT32 numVertices, UINT32 numIndices, DrawOperationType drawOp)
  8. :MeshBase(numVertices, numIndices, drawOp), mParentHeap(parentHeap), mId(id), mIsDestroyed(false)
  9. {
  10. }
  11. TransientMesh::~TransientMesh()
  12. {
  13. if(!mIsDestroyed)
  14. {
  15. TransientMeshPtr meshPtr = std::static_pointer_cast<TransientMesh>(getThisPtr());
  16. mParentHeap->dealloc(meshPtr);
  17. }
  18. }
  19. void TransientMesh::writeSubresource(UINT32 subresourceIdx, const GpuResourceData& data, bool discardEntireBuffer)
  20. {
  21. BS_EXCEPT(InvalidStateException, "Updating is not supported on a transient mesh.");
  22. }
  23. void TransientMesh::readSubresource(UINT32 subresourceIdx, GpuResourceData& data)
  24. {
  25. BS_EXCEPT(InvalidStateException, "Reading is not supported on a transient mesh.");
  26. }
  27. std::shared_ptr<VertexData> TransientMesh::_getVertexData() const
  28. {
  29. return mParentHeap->_getVertexData();
  30. }
  31. IndexBufferPtr TransientMesh::_getIndexBuffer() const
  32. {
  33. return mParentHeap->_getIndexBuffer();
  34. }
  35. UINT32 TransientMesh::_getVertexOffset() const
  36. {
  37. return mParentHeap->getVertexOffset(mId);
  38. }
  39. UINT32 TransientMesh::_getIndexOffset() const
  40. {
  41. return mParentHeap->getIndexOffset(mId);
  42. }
  43. void TransientMesh::_notifyUsedOnGPU()
  44. {
  45. mParentHeap->notifyUsedOnGPU(mId);
  46. }
  47. MeshProxyPtr TransientMesh::_createProxy(UINT32 subMeshIdx)
  48. {
  49. MeshProxyPtr coreProxy = bs_shared_ptr<MeshProxy>();
  50. coreProxy->mesh = getThisPtr();
  51. coreProxy->subMesh = mSubMeshes[0];
  52. // Note: Not calculating bounds for transient meshes yet
  53. // (No particular reason, I just didn't bother)
  54. coreProxy->bounds = Bounds();
  55. return coreProxy;
  56. }
  57. }