static void render() { render_shadowmap(); render_flag(); glutSwapBuffers(); }
void Compositor::render(Viewer& viewer) { // render the world, twice if stereo is enabled if (true) { OpenGLState state; #ifndef HAVE_OPENGLES2 if (m_render_shadowmap) { g_shadowmap->bind(); render_shadowmap(viewer); g_shadowmap->unbind(); } #endif if (m_stereo_mode == StereoMode::None) { m_renderbuffer1->bind(); render_scene(viewer, Stereo::Center); m_renderbuffer1->unbind(); m_renderbuffer1->blit(*m_framebuffer1); } else { m_renderbuffer1->bind(); render_scene(viewer, Stereo::Left); m_renderbuffer1->unbind(); m_renderbuffer2->bind(); render_scene(viewer, Stereo::Right); m_renderbuffer2->unbind(); m_renderbuffer1->blit(*m_framebuffer1); m_renderbuffer2->blit(*m_framebuffer2); } } // composit the final image if (true) { OpenGLState state; MaterialPtr material = std::make_shared<Material>(); { // setup material material->set_program(m_composition_prog); material->set_uniform("MVP", UniformSymbol::ModelViewProjectionMatrix); material->set_uniform("barrel_power", m_barrel_power); material->set_uniform("left_eye", 0); material->set_uniform("right_eye", 1); if (!viewer.m_cfg.m_show_calibration) { material->set_texture(0, m_framebuffer1->get_color_texture()); material->set_texture(1, m_framebuffer2->get_color_texture()); } else { material->set_texture(0, m_calibration_left_texture); material->set_texture(1, m_calibration_right_texture); } m_viewport_offset = {0, 0}; switch(m_stereo_mode) { case StereoMode::Cybermaxx: m_viewport_offset = {-41, 16}; m_composition_prog = m_cybermaxx_prog; break; case StereoMode::CrossEye: m_composition_prog = m_crosseye_prog; break; case StereoMode::Anaglyph: m_composition_prog = m_anaglyph_prog; break; case StereoMode::Depth: material->set_texture(0, m_framebuffer1->get_depth_texture()); m_composition_prog = m_depth_prog; break; case StereoMode::Newsprint: m_composition_prog = m_newsprint_prog; break; default: m_composition_prog = m_mono_prog; break; } } // setup material ModelPtr model = std::make_shared<Model>(); model->add_mesh(Mesh::create_rect(0.0f, 0.0f, m_screen_w, m_screen_h, -20.0f)); model->set_material(material); Camera camera; camera.ortho(0, m_screen_w, m_screen_h, 0.0f, 0.1f, 10000.0f); SceneManager mgr; mgr.get_world()->attach_model(model); RenderContext ctx(camera, mgr.get_world()); glViewport(m_viewport_offset.x, m_viewport_offset.y, m_screen_w, m_screen_h); glClearColor(0.0, 0.0, 0.0, 1.0); glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); mgr.render(camera); render_menu(ctx, viewer); } assert_gl("display:exit()"); }