static void ui_end(void) { if (!ui.down && !ui.middle && !ui.right) ui.active = NULL; if (ui_needs_update) glfwPostEmptyEvent(); }
void Renderer::drawContents() { _engine.viewOptions().showDomain = true; _engine.viewOptions().showBoundaryParticles = false; _engine.viewOptions().showBoundaryMeshes = true; _engine.viewOptions().showDebug = false; _engine.viewOptions().showCache = true; switch (_settings.renderMode) { case RendererSettings::Particles: _engine.viewOptions().showFluidParticles = true; _engine.viewOptions().showFluidMesh = false; break; case RendererSettings::Mesh: case RendererSettings::SLG: _engine.viewOptions().showFluidParticles = false; _engine.viewOptions().showFluidMesh = true; break; } // Interpolate camera { float t = float(_frameIndex) / _frameCount; _engine.camera().setPosition(lerp(t, _startCamera.position, _endCamera.position)); _engine.camera().setTarget(lerp(t, _startCamera.target, _endCamera.target)); _engine.camera().setUp(lerp(t, _startCamera.up, _endCamera.up).normalized()); _engine.camera().setFov(lerp(t, _startCamera.fov, _endCamera.fov)); _engine.camera().setNear(lerp(t, _startCamera.near, _endCamera.near)); _engine.camera().setFar(lerp(t, _startCamera.far, _endCamera.far)); } _engine.setCacheFrame(_frameFirst + _frameIndex); _engine.render(); switch (_settings.renderMode) { case RendererSettings::Particles: case RendererSettings::Mesh: _engine.renderToPNG(tfm::format("images/frame%04d.png", _frameIndex)); break; case RendererSettings::SLG: renderSLG(); break; } ++_frameIndex; if (_frameIndex >= _frameCount) { terminate(); } // Show time estimate float elapsed = _timer.elapsed(); float progress = float(_frameIndex) / _frameCount; float eta = progress != 0.f ? elapsed / progress - elapsed : 0.f; std::cout << tfm::format("Progress %.1f%% (Elapsed: %s ETA: %s)", progress * 100.f, timeString(elapsed), timeString(eta)) << std::flush; glfwPostEmptyEvent(); }
void Viewer::drawContents() { if (_isRunning) { _engine.updateStep(); glfwPostEmptyEvent(); } _engine.render(); }
void mainloop(int refresh) { if (mainloop_active) throw std::runtime_error("Main loop is already running!"); mainloop_active = true; std::thread refresh_thread; if (refresh > 0) { /* If there are no mouse/keyboard events, try to refresh the view roughly every 50 ms (default); this is to support animations such as progress bars while keeping the system load reasonably low */ refresh_thread = std::thread( [refresh]() { std::chrono::milliseconds time(refresh); while (mainloop_active) { std::this_thread::sleep_for(time); glfwPostEmptyEvent(); } } ); } try { while (mainloop_active) { int numScreens = 0; for (auto kv : __nanogui_screens) { Screen *screen = kv.second; if (!screen->visible()) { continue; } else if (glfwWindowShouldClose(screen->glfwWindow())) { screen->setVisible(false); continue; } screen->drawAll(); numScreens++; } if (numScreens == 0) { /* Give up if there was nothing to draw */ mainloop_active = false; break; } /* Wait for mouse/keyboard or empty refresh events */ glfwWaitEvents(); } /* Process events once more */ glfwPollEvents(); } catch (const std::exception &e) { std::cerr << "Caught exception in main loop: " << e.what() << std::endl; leave(); } if (refresh > 0) refresh_thread.join(); }
void quit_handler(int) { if (view) { mbgl::Log::Info(mbgl::Event::Setup, "waiting for quit..."); glfwSetWindowShouldClose(view->window, true); glfwPostEmptyEvent(); } else { exit(0); } }
void quit_handler(int) { if (view) { fprintf(stderr, "waiting for quit...\n"); glfwSetWindowShouldClose(view->window, true); glfwPostEmptyEvent(); } else { exit(0); } }
void stop(int) { if (!glfwWindowShouldClose(main_window)) { logMsg("shutdown\n"); glfwSetWindowShouldClose(main_window, 1); glfwPostEmptyEvent(); } else { logMsg("killed!\n"); exit(1); } }
void GLFWView::swap() { glfwPostEmptyEvent(); }
void GLFWView::setShouldClose() { glfwSetWindowShouldClose(window, true); glfwPostEmptyEvent(); }
void GLFWView::invalidate() { clean.clear(); glfwPostEmptyEvent(); }
void GLFWView::notify() { glfwPostEmptyEvent(); }
void requestRender() { #ifdef PLATFORM_LINUX glfwPostEmptyEvent(); #endif }
void GLFWView::invalidate() { dirty = true; glfwPostEmptyEvent(); }