1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
#pragma once
#include "iscenegraph.h"
#include "render/RenderableCollectorBase.h"
namespace render
{
/**
* \brief
* Scenegraph walker class that finds all renderable objects and adds them to a
* given RenderableCollector.
*/
class RenderableCollectionWalker
{
public:
/**
* \brief
* Use a RenderableCollectionWalker to find all renderables in the global
* scenegraph.
*/
static void CollectRenderablesInScene(RenderableCollectorBase& collector, const VolumeTest& volume)
{
// Submit renderables from scene graph
GlobalSceneGraph().foreachVisibleNodeInVolume(volume, [&](const scene::INodePtr& node)
{
collector.processNode(node, volume);
return true;
});
// Prepare any renderables that have been directly attached to the RenderSystem
// without belonging to an actual scene object
GlobalRenderSystem().forEachRenderable([&](Renderable& renderable)
{
renderable.onPreRender(volume);
});
}
};
} // namespace
|