BsTransientMesh.cpp 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #include "BsTransientMesh.h"
  2. #include "BsVertexData.h"
  3. #include "BsBounds.h"
  4. #include "BsMeshHeap.h"
  5. #include "BsFrameAlloc.h"
  6. namespace BansheeEngine
  7. {
  8. TransientMeshCore::TransientMeshCore(const MeshHeapPtr& parentHeap, UINT32 id, UINT32 numVertices, UINT32 numIndices, const Vector<SubMesh>& subMeshes)
  9. :MeshCoreBase(numVertices, numIndices, subMeshes), mParentHeap(parentHeap), mId(id)
  10. {
  11. }
  12. SPtr<VertexData> TransientMeshCore::getVertexData() const
  13. {
  14. return mParentHeap->getVertexData();
  15. }
  16. SPtr<IndexBufferCore> TransientMeshCore::getIndexBuffer() const
  17. {
  18. return mParentHeap->getIndexBuffer();
  19. }
  20. UINT32 TransientMeshCore::getVertexOffset() const
  21. {
  22. return mParentHeap->getVertexOffset(mId);
  23. }
  24. UINT32 TransientMeshCore::getIndexOffset() const
  25. {
  26. return mParentHeap->getIndexOffset(mId);
  27. }
  28. void TransientMeshCore::_notifyUsedOnGPU()
  29. {
  30. mParentHeap->notifyUsedOnGPU(mId);
  31. }
  32. TransientMesh::TransientMesh(const MeshHeapPtr& parentHeap, UINT32 id, UINT32 numVertices, UINT32 numIndices, DrawOperationType drawOp)
  33. :MeshBase(numVertices, numIndices, drawOp), mParentHeap(parentHeap), mId(id), mIsDestroyed(false)
  34. {
  35. }
  36. TransientMesh::~TransientMesh()
  37. {
  38. if (!mIsDestroyed)
  39. {
  40. TransientMeshPtr meshPtr = std::static_pointer_cast<TransientMesh>(getThisPtr());
  41. mParentHeap->dealloc(meshPtr);
  42. }
  43. }
  44. SPtr<TransientMeshCore> TransientMesh::getCore() const
  45. {
  46. return std::static_pointer_cast<TransientMeshCore>(mCoreSpecific);
  47. }
  48. SPtr<CoreObjectCore> TransientMesh::createCore() const
  49. {
  50. TransientMeshCore* core = new (bs_alloc<TransientMeshCore>()) TransientMeshCore(
  51. mParentHeap, mId, mProperties.mNumVertices, mProperties.mNumIndices, mProperties.mSubMeshes);
  52. SPtr<CoreObjectCore> meshCore = bs_shared_ptr<TransientMeshCore, GenAlloc>(core);
  53. return meshCore;
  54. }
  55. }