| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- #include "BsRenderQueue.h"
- namespace BansheeEngine
- {
- RenderQueue::RenderQueue()
- {
- }
- void RenderQueue::clear()
- {
- mRenderElements.clear();
- mSortedRenderElements.clear();
- }
- void RenderQueue::add(const MaterialProxyPtr& material, const MeshProxyPtr& mesh, const Vector3& worldPosForSort)
- {
- // TODO - Make sure RenderQueueElements are cached so we dont allocate memory for them every frame
- mRenderElements.push_back(RenderQueueElement());
- RenderQueueElement& renderOp = mRenderElements.back();
- renderOp.material = material;
- renderOp.mesh = mesh;
- renderOp.worldPosition = worldPosForSort;
- }
- void RenderQueue::sort()
- {
- // Just pass-through for now
- for (auto& renderElem : mRenderElements)
- {
- UINT32 numPasses = (UINT32)renderElem.material->passes.size();
- for (UINT32 i = 0; i < numPasses; i++)
- {
- mSortedRenderElements.push_back(RenderQueueElement());
- RenderQueueElement& sortedElem = mSortedRenderElements.back();
- sortedElem.material = renderElem.material;
- sortedElem.mesh = renderElem.mesh;
- sortedElem.worldPosition = renderElem.worldPosition;
- sortedElem.passIdx = i;
- }
- }
- // TODO - Actually do some sorting. Use material options to sort (isTransparent, isOverlay(need to add this), etc.)
- // 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
- }
- const Vector<RenderQueueElement>& RenderQueue::getSortedElements() const
- {
- return mSortedRenderElements;
- }
- }
|