コード例 #1
0
ファイル: gl-main.c プロジェクト: ArtifexSoftware/mupdf
static void ui_end(void)
{
    if (!ui.down && !ui.middle && !ui.right)
        ui.active = NULL;
    if (ui_needs_update)
        glfwPostEmptyEvent();
}
コード例 #2
0
ファイル: Renderer.cpp プロジェクト: Seashell2011/pbsproject
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();
}
コード例 #3
0
ファイル: Viewer.cpp プロジェクト: Seashell2011/pbsproject
void Viewer::drawContents() {
    if (_isRunning) {
        _engine.updateStep();
        glfwPostEmptyEvent();
    }

    _engine.render();
}
コード例 #4
0
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();
}
コード例 #5
0
ファイル: main.cpp プロジェクト: simudream/mapbox-gl-native
void quit_handler(int) {
    if (view) {
        mbgl::Log::Info(mbgl::Event::Setup, "waiting for quit...");
        glfwSetWindowShouldClose(view->window, true);
        glfwPostEmptyEvent();
    } else {
        exit(0);
    }
}
コード例 #6
0
ファイル: main.cpp プロジェクト: aldajl/mapbox-gl-native
void quit_handler(int) {
    if (view) {
        fprintf(stderr, "waiting for quit...\n");
        glfwSetWindowShouldClose(view->window, true);
        glfwPostEmptyEvent();
    } else {
        exit(0);
    }
}
コード例 #7
0
ファイル: glfwApp.cpp プロジェクト: enterstudio/tangram-es
void stop(int) {
    if (!glfwWindowShouldClose(main_window)) {
        logMsg("shutdown\n");
        glfwSetWindowShouldClose(main_window, 1);
        glfwPostEmptyEvent();
    } else {
        logMsg("killed!\n");
        exit(1);
    }
}
コード例 #8
0
void GLFWView::swap() {
    glfwPostEmptyEvent();
}
コード例 #9
0
void GLFWView::setShouldClose() {
    glfwSetWindowShouldClose(window, true);
    glfwPostEmptyEvent();
}
コード例 #10
0
void GLFWView::invalidate() {
    clean.clear();
    glfwPostEmptyEvent();
}
コード例 #11
0
void GLFWView::notify() {
    glfwPostEmptyEvent();
}
コード例 #12
0
void requestRender() {
    #ifdef PLATFORM_LINUX
    glfwPostEmptyEvent();
    #endif
}
コード例 #13
0
void GLFWView::invalidate() {
    dirty = true;
    glfwPostEmptyEvent();
}