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

	}
Exemplo n.º 2
0
RenderQueue::~RenderQueue(){
    for (PassToRenderableListMap::iterator iter = mPassToRenderables.begin();
         iter != mPassToRenderables.end(); ++iter) {
        RenderableList* renderableList = iter->second;
        if (renderableList) {
            renderableList->clear();  // Does not own the renderables.
            delete renderableList;
        }
    }
    mPassToRenderables.clear();
}
Exemplo n.º 3
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);
    }
}
Exemplo n.º 4
0
void GameState::update()
{
	if (!checkCollisions()) {
		// User has collided with exit node so continuing beyond this point will segfault
		return;
	}
	m_camera->update();

	m_targetMaterial->setUniform("time", Time::totalSeconds());

	m_targetNode->setRotation(glm::rotate(m_targetNode->rotation(), Time::deltaTime() * GE_PI/2.0f, kUnitVectorY));
	m_targetNode->setPosition(m_targetNode->position() + (float)cos(Time::totalSeconds()) * 0.02f * kUnitVectorY);

	LightInfoList lights;
	RenderableList renderables;
	NodeTreeVisitor treeVisitor;
	treeVisitor.visitNodeTree(m_scene, {
		[&renderables, &lights] (Node *node, const glm::mat4 &modelMatrix) {
			if (node->meshCount()) {
				renderables.push_back({ modelMatrix, node });
			}
			if (node->light()) {
				lights.push_back({ modelMatrix, node->light() });
			}
		}
	});

	geRenderer->setActiveCameraAndLights(m_camera->camera(), lights);

	m_compositor->bindInputFramebuffer();

	geRenderer->clear();
	geRenderer->render(renderables);

	m_compositor->unbindInputFramebuffer();

	m_compositor->compose(m_compositorEffects);
}