BsMeshRenderData.cpp 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #include "BsMeshRenderData.h"
  2. #include "BsRenderableProxy.h"
  3. namespace BansheeEngine
  4. {
  5. MeshRenderData::MeshRenderData(const std::shared_ptr<VertexData>& vertexData,
  6. const IndexBufferPtr& indexBuffer, const SubMesh& subMesh, UINT32 vertexOffset, std::function<void()> usedOnGPUcallback)
  7. :mVertexData(vertexData), mIndexBuffer(indexBuffer), mSubMesh(subMesh),
  8. mUsedOnGPUCallback(usedOnGPUcallback), mVertexOffset(vertexOffset), mIsMeshValid(true)
  9. {
  10. }
  11. void MeshRenderData::addRenderableProxy(RenderableElement* proxy)
  12. {
  13. mRenderableProxies.push_back(proxy);
  14. }
  15. void MeshRenderData::removeRenderableProxy(RenderableElement* proxy)
  16. {
  17. auto iterFind = std::find(mRenderableProxies.begin(), mRenderableProxies.end(), proxy);
  18. if (iterFind != mRenderableProxies.end())
  19. mRenderableProxies.erase(iterFind);
  20. }
  21. void MeshRenderData::updateBounds(const Bounds& bounds)
  22. {
  23. mBounds = bounds;
  24. for (auto& renderableProxy : mRenderableProxies)
  25. {
  26. renderableProxy->markBoundsDirty();
  27. }
  28. }
  29. void MeshRenderData::updateData(const std::shared_ptr<VertexData>& vertexData, const IndexBufferPtr& indexBuffer,
  30. const SubMesh& subMesh, UINT32 vertexOffset)
  31. {
  32. mVertexData = vertexData;
  33. mIndexBuffer = indexBuffer;
  34. mSubMesh = subMesh;
  35. }
  36. void MeshRenderData::notifyUsedOnGPU() const
  37. {
  38. if (mIsMeshValid && mUsedOnGPUCallback != nullptr)
  39. mUsedOnGPUCallback();
  40. }
  41. void MeshRenderData::_markAsInvalid()
  42. {
  43. mIsMeshValid = false;
  44. }
  45. }