BsRenderQueue.cpp 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #include "BsRenderQueue.h"
  2. namespace BansheeEngine
  3. {
  4. RenderQueue::RenderQueue()
  5. {
  6. }
  7. void RenderQueue::clear()
  8. {
  9. mRenderElements.clear();
  10. mSortedRenderElements.clear();
  11. }
  12. void RenderQueue::add(const MaterialProxyPtr& material, const MeshProxyPtr& mesh, const Vector3& worldPosForSort)
  13. {
  14. // TODO - Make sure RenderQueueElements are cached so we dont allocate memory for them every frame
  15. mRenderElements.push_back(RenderQueueElement());
  16. RenderQueueElement& renderOp = mRenderElements.back();
  17. renderOp.material = material;
  18. renderOp.mesh = mesh;
  19. renderOp.worldPosition = worldPosForSort;
  20. }
  21. void RenderQueue::sort()
  22. {
  23. // Just pass-through for now
  24. for (auto& renderElem : mRenderElements)
  25. {
  26. UINT32 numPasses = (UINT32)renderElem.material->passes.size();
  27. for (UINT32 i = 0; i < numPasses; i++)
  28. {
  29. mSortedRenderElements.push_back(RenderQueueElement());
  30. RenderQueueElement& sortedElem = mSortedRenderElements.back();
  31. sortedElem.material = renderElem.material;
  32. sortedElem.mesh = renderElem.mesh;
  33. sortedElem.worldPosition = renderElem.worldPosition;
  34. sortedElem.passIdx = i;
  35. }
  36. }
  37. // TODO - Actually do some sorting. Use material options to sort (isTransparent, isOverlay(need to add this), etc.)
  38. // Note: When sorting make sure not to change order of unsorted elements. Some outside managers (like overlay and GUI) will provide render ops which are already sorted
  39. }
  40. const Vector<RenderQueueElement>& RenderQueue::getSortedElements() const
  41. {
  42. return mSortedRenderElements;
  43. }
  44. }