void prepare() { if (!mapData) return; if (atlasDirty) { rebuildAtlas(); atlasDirty = false; } if (mapViewportDirty) { updateMapViewport(); mapViewportDirty = false; } if (buffersDirty) { rebuildBuffers(); buffersDirty = false; } flashMap.prepare(); }
void AtomRenderableManager::render(Ambrosia::RenderPass renderPass) { // qDebug() << "AtomRenderableManager::render"; if (!validBuffers) rebuildBuffers(); switch (renderPass) { case Ambrosia::SHADOW_MAP_PASS: case Ambrosia::STENCIL_PASS: case Ambrosia::DRAW_OUTLINE_PASS: // set shaders if (specularShader) specularShader->disable(); break; case Ambrosia::DEPTH_SHADE_PASS: case Ambrosia::DEPTH_TRANSPARENT_PASS: case Ambrosia::DRAW_SHADE_PASS: case Ambrosia::DRAW_TRANSPARENT_PASS: case Ambrosia::DRAW_PASS: case Ambrosia::NAME_PASS: // set shaders if (specularShader) specularShader->enable(); break; default: break; } if (renderPass == Ambrosia::DRAW_OUTLINE_PASS || renderPass == Ambrosia::STENCIL_PASS || renderPass == Ambrosia::SHADOW_MAP_PASS) { map< Utopia::Node *, AtomRenderable * >::iterator atom_iter = renderables.begin(); map< Utopia::Node *, AtomRenderable * >::iterator atom_end = renderables.end(); for(; atom_iter != atom_end; ++atom_iter) { AtomRenderable * atom = atom_iter->second; if (atom->hasTag(Ambrosia::OUTLINE)) atom->render(renderPass); } } else if (renderPass == Ambrosia::NAME_PASS) { map< Utopia::Node *, AtomRenderable * >::iterator atom_iter = renderables.begin(); map< Utopia::Node *, AtomRenderable * >::iterator atom_end = renderables.end(); for(; atom_iter != atom_end; ++atom_iter) { AtomRenderable * atom = atom_iter->second; if (atom->hasTag(Ambrosia::SOLID) || atom->hasTag(Ambrosia::OUTLINE)) atom->render(renderPass); } } else { map< unsigned int, map< unsigned int, map< unsigned int, BufferManager * > > >::iterator format_iter = bufferManagers.begin(); map< unsigned int, map< unsigned int, map< unsigned int, BufferManager * > > >::iterator format_end = bufferManagers.end(); for (; format_iter != format_end; ++format_iter) { map< unsigned int, map< unsigned int, BufferManager * > >::iterator tag_iter = format_iter->second.begin(); map< unsigned int, map< unsigned int, BufferManager * > >::iterator tag_end = format_iter->second.end(); for (; tag_iter != tag_end; ++tag_iter) { if ((renderPass == Ambrosia::SHADOW_MAP_PASS || renderPass == Ambrosia::DRAW_PASS) && (tag_iter->first != Ambrosia::SOLID) && (tag_iter->first != Ambrosia::OUTLINE)) continue; if ((renderPass == Ambrosia::STENCIL_PASS || renderPass == Ambrosia::DRAW_OUTLINE_PASS || renderPass == Ambrosia::NAME_PASS) && (tag_iter->first != Ambrosia::SOLID && tag_iter->first != Ambrosia::SHADE) && (tag_iter->first != Ambrosia::OUTLINE)) continue; if ((renderPass == Ambrosia::DEPTH_SHADE_PASS || renderPass == Ambrosia::DRAW_SHADE_PASS) && (tag_iter->first != Ambrosia::SHADE) && (tag_iter->first != Ambrosia::OUTLINE)) continue; if ((renderPass == Ambrosia::DEPTH_TRANSPARENT_PASS || renderPass == Ambrosia::DRAW_TRANSPARENT_PASS) && (tag_iter->first != Ambrosia::Am_TRANSPARENT) && (tag_iter->first != Ambrosia::OUTLINE)) continue; map< unsigned int, BufferManager * >::iterator mode_iter = tag_iter->second.begin(); map< unsigned int, BufferManager * >::iterator mode_end = tag_iter->second.end(); for (; mode_iter != mode_end; ++mode_iter) { unsigned int mode = mode_iter->first; BufferManager * bufferManager = mode_iter->second; bufferManager->render(mode); } } } } // disable shaders if (specularShader) specularShader->disable(); }