BsMeshEx.cpp 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "Extensions/BsMeshEx.h"
  4. #include "CoreThread/BsCoreThread.h"
  5. namespace bs
  6. {
  7. HMesh MeshEx::create(int numVertices, int numIndices, DrawOperationType topology, MeshUsage usage,
  8. VertexLayout vertex, IndexType index)
  9. {
  10. MESH_DESC desc;
  11. desc.numVertices = numVertices;
  12. desc.numIndices = numIndices;
  13. desc.vertexDesc = RendererMeshData::vertexLayoutVertexDesc(vertex);
  14. desc.subMeshes = { SubMesh(0, numIndices, topology) };
  15. desc.usage = usage;
  16. desc.indexType = index;
  17. return Mesh::create(desc);
  18. }
  19. HMesh MeshEx::create(int numVertices, int numIndices, const Vector<SubMesh>& subMeshes, MeshUsage usage,
  20. VertexLayout vertex, IndexType index)
  21. {
  22. MESH_DESC desc;
  23. desc.numVertices = numVertices;
  24. desc.numIndices = numIndices;
  25. desc.vertexDesc = RendererMeshData::vertexLayoutVertexDesc(vertex);
  26. desc.subMeshes = subMeshes;
  27. desc.usage = usage;
  28. desc.indexType = index;
  29. return Mesh::create(desc);
  30. }
  31. HMesh MeshEx::create(const SPtr<RendererMeshData>& data, DrawOperationType topology, MeshUsage usage)
  32. {
  33. SPtr<MeshData> meshData;
  34. if (data != nullptr)
  35. meshData = data->getData();
  36. UINT32 numIndices = 0;
  37. if (meshData != nullptr)
  38. numIndices = meshData->getNumIndices();
  39. MESH_DESC desc;
  40. desc.subMeshes = { SubMesh(0, numIndices, topology) };
  41. desc.usage = usage;
  42. return Mesh::create(meshData, desc);
  43. }
  44. HMesh MeshEx::create(const SPtr<RendererMeshData>& data, const Vector<SubMesh>& subMeshes, MeshUsage usage)
  45. {
  46. SPtr<MeshData> meshData;
  47. if (data != nullptr)
  48. meshData = data->getData();
  49. MESH_DESC desc;
  50. desc.subMeshes = subMeshes;
  51. desc.usage = usage;
  52. return Mesh::create(meshData, desc);
  53. }
  54. Vector<SubMesh> MeshEx::getSubMeshes(const HMesh& thisPtr)
  55. {
  56. UINT32 numSubMeshes = thisPtr->getProperties().getNumSubMeshes();
  57. Vector<SubMesh> output(numSubMeshes);
  58. for (UINT32 i = 0; i < numSubMeshes; i++)
  59. output[i] = thisPtr->getProperties().getSubMesh(i);
  60. return output;
  61. }
  62. UINT32 MeshEx::getSubMeshCount(const HMesh& thisPtr)
  63. {
  64. return thisPtr->getProperties().getNumSubMeshes();
  65. }
  66. void MeshEx::getBounds(const HMesh& thisPtr, AABox* box, Sphere* sphere)
  67. {
  68. Bounds bounds = thisPtr->getProperties().getBounds();
  69. *box = bounds.getBox();
  70. *sphere = bounds.getSphere();
  71. }
  72. SPtr<RendererMeshData> MeshEx::getMeshData(const HMesh& thisPtr)
  73. {
  74. SPtr<MeshData> meshData = thisPtr->allocBuffer();
  75. thisPtr->readCachedData(*meshData);
  76. return RendererMeshData::create(meshData);
  77. }
  78. void MeshEx::setMeshData(const HMesh& thisPtr, const SPtr<RendererMeshData>& value)
  79. {
  80. if (value != nullptr)
  81. {
  82. SPtr<MeshData> meshData = value->getData();
  83. thisPtr->writeData(meshData, true);
  84. }
  85. }
  86. }