BsTransientMesh.cpp 2.1 KB

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