00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include "xrb_framehandler.hpp"
00012
00013 namespace Xrb
00014 {
00015
00016 FrameHandler::FrameHandler ()
00017 {
00018 m_most_recent_time = -1.0f;
00019 m_frame_dt = 0.0f;
00020 m_lock = 0;
00021 m_frame_count = 0;
00022 m_skip_time = false;
00023 }
00024
00025 FrameHandler::~FrameHandler ()
00026 {
00027 ASSERT1(m_lock == 0 && "Do not delete a FrameHandler while processing a frame");
00028 }
00029
00030 void FrameHandler::ProcessFrame (Float const time)
00031 {
00032
00033 StartFrame(time);
00034
00035 HandleFrame();
00036
00037 EndFrame();
00038 }
00039
00040 void FrameHandler::StartFrame (Float const time)
00041 {
00042 ASSERT1(time >= 0.0f);
00043 ASSERT1(time >= m_most_recent_time);
00044
00045
00046 if (m_lock == 0)
00047 {
00048
00049 if (m_most_recent_time == -1.0f)
00050 m_most_recent_time = time;
00051
00052
00053
00054 if (m_skip_time)
00055 {
00056 m_skip_time = false;
00057 m_most_recent_time = time;
00058 }
00059
00060
00061 ASSERT1(time >= m_most_recent_time);
00062 m_frame_dt = time - m_most_recent_time;
00063
00064
00065 m_most_recent_time = time;
00066 }
00067
00068
00069 ASSERT1(m_lock < UINT32_UPPER_BOUND);
00070
00071 ++m_lock;
00072 }
00073
00074 void FrameHandler::EndFrame ()
00075 {
00076 ASSERT1(m_lock > 0);
00077
00078 --m_lock;
00079
00080 if (m_lock == 0)
00081 {
00082
00083 m_frame_dt = 0.0f;
00084
00085 ++m_frame_count;
00086 }
00087 }
00088
00089 }