BsTransientMesh.cpp 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "BsTransientMesh.h"
  4. #include "BsVertexData.h"
  5. #include "BsBounds.h"
  6. #include "BsMeshHeap.h"
  7. #include "BsFrameAlloc.h"
  8. namespace BansheeEngine
  9. {
  10. TransientMeshCore::TransientMeshCore(const SPtr<MeshHeapCore>& parentHeap, UINT32 id,
  11. UINT32 numVertices, UINT32 numIndices, const Vector<SubMesh>& subMeshes)
  12. :MeshCoreBase(numVertices, numIndices, subMeshes), mParentHeap(parentHeap), mId(id)
  13. {
  14. }
  15. SPtr<VertexData> TransientMeshCore::getVertexData() const
  16. {
  17. return mParentHeap->getVertexData();
  18. }
  19. SPtr<IndexBufferCore> TransientMeshCore::getIndexBuffer() const
  20. {
  21. return mParentHeap->getIndexBuffer();
  22. }
  23. UINT32 TransientMeshCore::getVertexOffset() const
  24. {
  25. return mParentHeap->getVertexOffset(mId);
  26. }
  27. UINT32 TransientMeshCore::getIndexOffset() const
  28. {
  29. return mParentHeap->getIndexOffset(mId);
  30. }
  31. SPtr<VertexDataDesc> TransientMeshCore::getVertexDesc() const
  32. {
  33. return mParentHeap->getVertexDesc();
  34. }
  35. void TransientMeshCore::_notifyUsedOnGPU()
  36. {
  37. mParentHeap->notifyUsedOnGPU(mId);
  38. }
  39. TransientMesh::TransientMesh(const SPtr<MeshHeap>& parentHeap, UINT32 id, UINT32 numVertices, UINT32 numIndices, DrawOperationType drawOp)
  40. :MeshBase(numVertices, numIndices, drawOp), mIsDestroyed(false), mParentHeap(parentHeap), mId(id)
  41. {
  42. }
  43. TransientMesh::~TransientMesh()
  44. {
  45. if (!mIsDestroyed)
  46. {
  47. SPtr<TransientMesh> meshPtr = std::static_pointer_cast<TransientMesh>(getThisPtr());
  48. mParentHeap->dealloc(meshPtr);
  49. }
  50. }
  51. SPtr<TransientMeshCore> TransientMesh::getCore() const
  52. {
  53. return std::static_pointer_cast<TransientMeshCore>(mCoreSpecific);
  54. }
  55. SPtr<CoreObjectCore> TransientMesh::createCore() const
  56. {
  57. TransientMeshCore* core = new (bs_alloc<TransientMeshCore>()) TransientMeshCore(
  58. mParentHeap->getCore(), mId, mProperties.mNumVertices, mProperties.mNumIndices, mProperties.mSubMeshes);
  59. SPtr<CoreObjectCore> meshCore = bs_shared_ptr<TransientMeshCore>(core);
  60. meshCore->_setThisPtr(meshCore);
  61. return meshCore;
  62. }
  63. }