BsTransientMesh.h 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #pragma once
  4. #include "BsCorePrerequisites.h"
  5. #include "Mesh/BsMeshBase.h"
  6. namespace bs
  7. {
  8. /** @addtogroup Resources
  9. * @{
  10. */
  11. /**
  12. * Represents a single mesh entry in the MeshHeap. This can be used as a normal mesh but due to the nature of the
  13. * mesh heap it is not the type of mesh you should use for storing static data.
  14. *
  15. * Transient meshes don't keep internal index/vertex buffers but instead use the ones provided by their parent mesh heap.
  16. *
  17. * @note Sim thread.
  18. */
  19. class BS_CORE_EXPORT TransientMesh : public MeshBase
  20. {
  21. public:
  22. virtual ~TransientMesh();
  23. /** Retrieves a core implementation of a mesh usable only from the core thread. */
  24. SPtr<ct::TransientMesh> getCore() const;
  25. protected:
  26. friend class MeshHeap;
  27. /**
  28. * Constructs a new transient mesh.
  29. *
  30. * @see MeshHeap::alloc
  31. */
  32. TransientMesh(const SPtr<MeshHeap>& parentHeap, UINT32 id, UINT32 numVertices,
  33. UINT32 numIndices, DrawOperationType drawOp = DOT_TRIANGLE_LIST);
  34. /** Marks the mesh as destroyed so we know that we don't need to destroy it ourselves. */
  35. void markAsDestroyed() { mIsDestroyed = true; }
  36. /** @copydoc MeshBase::createCore */
  37. SPtr<ct::CoreObject> createCore() const override;
  38. protected:
  39. bool mIsDestroyed;
  40. SPtr<MeshHeap> mParentHeap;
  41. UINT32 mId;
  42. };
  43. /** @} */
  44. namespace ct
  45. {
  46. /** @addtogroup Resources-Internal
  47. * @{
  48. */
  49. /**
  50. * Core thread portion of a bs::TransientMesh.
  51. *
  52. * @note Core thread.
  53. */
  54. class BS_CORE_EXPORT TransientMesh : public MeshBase
  55. {
  56. public:
  57. TransientMesh(const SPtr<MeshHeap>& parentHeap, UINT32 id, UINT32 numVertices,
  58. UINT32 numIndices, const Vector<SubMesh>& subMeshes);
  59. /** @copydoc MeshBase::getVertexData */
  60. SPtr<VertexData> getVertexData() const override;
  61. /** @copydoc MeshBase::getIndexBuffer */
  62. SPtr<IndexBuffer> getIndexBuffer() const override;
  63. /** @copydoc MeshBase::getVertexDesc */
  64. SPtr<VertexDataDesc> getVertexDesc() const override;
  65. /** Returns the ID that uniquely identifies this mesh in the parent heap. */
  66. UINT32 getMeshHeapId() const { return mId; }
  67. /** @copydoc MeshBase::getVertexOffset */
  68. UINT32 getVertexOffset() const override;
  69. /** @copydoc MeshBase::getIndexOffset */
  70. UINT32 getIndexOffset() const override;
  71. /** @copydoc MeshBase::_notifyUsedOnGPU */
  72. void _notifyUsedOnGPU() override;
  73. protected:
  74. friend class bs::TransientMesh;
  75. SPtr<MeshHeap> mParentHeap;
  76. UINT32 mId;
  77. };
  78. /** @} */
  79. }
  80. }