//-----------------------------------------------------------------------
	void QueuedRenderableCollection::acceptVisitorGrouped(
		QueuedRenderableVisitor* visitor) const
	{
		PassGroupRenderableMap::const_iterator ipass, ipassend;
		ipassend = mGrouped.end();
		for (ipass = mGrouped.begin(); ipass != ipassend; ++ipass)
		{
			// Fast bypass if this group is now empty
			if (ipass->second->empty()) continue;

			// Visit Pass - allow skip
			if (!visitor->visit(ipass->first))
				continue;

			RenderableList* rendList = ipass->second;
			RenderableList::const_iterator irend, irendend;
			irendend = rendList->end();
			for (irend = rendList->begin(); irend != irendend; ++irend)
			{
				// Visit Renderable
				visitor->visit(const_cast<Renderable*>(*irend));
			}
		} 

	}
Пример #2
0
void RenderQueue::accept(RenderQueueVisitor& visitor) {
    for (PassToRenderableListMap::const_iterator iter = mPassToRenderables.begin();
         iter != mPassToRenderables.end(); ++iter) {
        RenderableList* renderables = iter->second;
        if (!renderables) {
            continue;
        }

        Pass* pass = iter->first;
        assert(pass != NULL);
        visitor.preVisit(pass);
        for (RenderableList::const_iterator rIter = renderables->begin();
             rIter != renderables->end(); ++rIter) {
            visitor.visit(*rIter);
        }
        visitor.postVisit(pass);
    }
}