Esempio n. 1
0
    // Wait until the the frame is completed or rendering is aborted.
    IRendererController::Status wait_for_event(IFrameRenderer& frame_renderer)
    {
        bool is_paused = false;

        while (true)
        {
            if (!frame_renderer.is_rendering())
                return IRendererController::TerminateRendering;

            const IRendererController::Status status = m_renderer_controller->get_status();

            switch (status)
            {
              case IRendererController::ContinueRendering:
                if (is_paused)
                {
                    frame_renderer.resume_rendering();
                    m_renderer_controller->on_rendering_resume();
                    m_stopwatch.resume();
                    is_paused = false;
                }
                break;

              case IRendererController::PauseRendering:
                if (!is_paused)
                {
                    frame_renderer.pause_rendering();
                    m_renderer_controller->on_rendering_pause();
                    m_stopwatch.pause();
                    is_paused = true;
                }
                break;

              default:
                return status;
            }

            m_renderer_controller->on_progress();

            foundation::sleep(1);   // namespace qualifer required
        }
    }
        /// <summary>
        /// EasingControllerが一時停止中である場合、再開します。
        /// </summary>
        /// <returns>
        /// なし
        /// </returns>
		void resume()
		{
			m_stopwatch.resume();
		}