private void TryDoUpdateAndRender()
        {
            if (m_firstFrame)
            {
                m_firstFrame = false;
                return;
            }

            if (MapHost.Source == null)
            {
                return;
            }

            if (!m_mapImage.IsFrontBufferAvailable)
            {
                return;
            }

            var dt = m_frameTimer.Elapsed.TotalSeconds;

            if (!m_hasEmptiedEventQueueSinceLastRender && (dt < m_maxDelta))
            {
                if (m_logging)
                {
                    Debug.WriteLine(string.Format("[{0}] BAIL dt {1}, frameTimer {2}", m_frameCount, dt, m_frameTimer.Elapsed));
                }
                return;
            }

            if (m_logging)
            {
                Debug.WriteLine(string.Format("[{0}] BAIL dt {1}, frameTimer {2}", m_frameCount, dt, m_frameTimer.Elapsed));
            }

            m_hasEmptiedEventQueueSinceLastRender = false;
            m_hasHadRenderEventSinceRender        = false;
            ++m_frameCount;
            m_frameTimer.Restart();

            if (m_buttonsDown > 0)
            {
                m_mapImage.SaveInputTime();
            }

            m_mapImage.Render((float)dt);
        }