//----------------------------------------------------------------------- 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)); } } }
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); } }