في 25 حزيران 2008 07:41 م، عقد وسام البهنسي حاجبيه بتفكير وقال:
جمييل! هذه أول مرة أسمع بها عن جهاز الوركاء. هل كان نظام التشغيل معرباً؟ حيث أن نظام جهاز الصخر MSX كان من تعريب شركة العالمية. Sleep(FRAME_TIME);
while( (timer.getTime() - startTime) < (FRAME_TIME ) );
Given time difference: T in seconds
FPS = 1 / T
...
EnableOpenGL (hWnd, &hDC, &hRC);
// starts from here
const float REQUIRED_FPS = 30.0f; // Set this to the FPS you want (you can even use fractions)
const float FRAME_TIME_FPS = 1000.0f / REQUIRED_FPS;
unsigned int curTime = GetTickCount();
unsigned int prevTime = curTime; // Initially, we want prevTime to equal curTime so that
// the difference (frameTime) is zero for the first rendered frame
unsigned int frameTime = 0; // The difference between current and previous time in milliseconds
// or the time every frame takes to render
int update_fps = 0; // This is a counter used to make fps display update once every 30 frames
while (!bQuit)
{
/* check for messages */
if (PeekMessage (&msg, NULL, 0, 0, PM_REMOVE))
{
/* handle or dispatch messages */
if (msg.message == WM_QUIT)
{
bQuit = TRUE;
}
else
{
TranslateMessage (&msg);
DispatchMessage (&msg);
}
}
else
{
char titleBar[25]; // avoid using "static" within functions at all costs
drawSomething(10);
curTime = GetTickCount();
frameTime = curTime - prevTime;
if( frameTime < FRAME_TIME_FPS )
{
int difference = FRAME_TIME_FPS - frameTime;
Sleep(difference);
frameTime += difference;
}
update_fps++;
if( update_fps > 30 )
{
int FPS = 1000*(1 / frameTime); // it is multiplied by 1000 because frameTime is in milliseconds
wsprintf(titleBar, "%d FPS", FPS);
SetWindowText(hWnd, titleBar);
update_fps = 0;
}
prevTime = curTime;
}
}
// Ends here
/* shutdown OpenGL */
DisableOpenGL (hWnd, hDC, hRC);
...
في 27 يونيو 2008 10:22 ص، غمغم الشمري باستغراب قائلاً:
الوضوع صار ذكريات يا شباب☺ .. هي ذكريات جميلة .. ولكن حاضرنا أحلى☺ ..بتاريخ 27 يونيو 2008 10:22 ص، قطب الشمري حاجبيه بشدة وهو يقول:
من المفترض أنها يؤديان نفس الغرض .. ولكن عند حساب FPS .. يختلف الناتج .. وضعت مثال في الفريق العربي ,, :// كود بداية تشغيل البرنامج
timeBeginPeriod(1); // زيادة دقة المؤقت إلى ميللي ثانية واحدة
// تذكر إعادة الدقة إلى قيمتها الأصلية عند إغلاق اللعبة
const float REQUIRED_FPS = 30.0f; // Set this to the FPS you want (you can even use fractions)
const float FRAME_TIME_FPS = 1000.0f / REQUIRED_FPS;
DWORD curTime = timeGetTime();
DWORD prevTime = curTime;
while (!bQuit)
{
/* check for messages */
if (PeekMessage (&msg, NULL, 0, 0, PM_REMOVE))
{
... // معالجة الرسائل
continue;
}
curTime = GetTickCount();
if (curTime-prevTime < FRAME_TIME_FPS)
{
Sleep(0); // أو 1، أيهما يعطيك نتيجة أفضل
continue;
}
prevTime = curTime;
TickGame();
DrawGame();
}
أما في 23/جمادى الثانية/1429 08:59 م، فقد تنهد وسام البهنسي بارتياح وهو يرد:
أعتذر. أنا السبب في ذلك...// Filter out values wildly different from current average
if ( fabsf(fTimeElapsed - m_TimeElapsed) < 1.0f )
{
// Wrap FIFO frame time buffer.
memmove( &m_FrameTime[1], m_FrameTime, (MAX_SAMPLE_COUNT - 1) * sizeof(float) );
m_FrameTime[ 0 ] = fTimeElapsed;
if ( m_SampleCount < MAX_SAMPLE_COUNT ) m_SampleCount++;
} // End if
// Calculate Frame Rate
m_FPSFrameCount++;
m_FPSTimeElapsed += m_TimeElapsed;
if ( m_FPSTimeElapsed > 1.0f)
{
m_FrameRate = m_FPSFrameCount;
m_FPSFrameCount = 0;
m_FPSTimeElapsed = 0.0f;
} // End If Second Elapsed
// Count up the new average elapsed time
m_TimeElapsed = 0.0f;
for ( ULONG i = 0; i < m_SampleCount; i++ ) m_TimeElapsed += m_FrameTime[ i ];
if ( m_SampleCount > 0 ) m_TimeElapsed /= m_SampleCount;
// Next Frame
// LastTime = 100
// CurrentTime = 110
while (CurrentTime-LastTime < 16.6)
wasteTimeAndRecalculateCurrentTime();
LastTime = CurrentTime; // CurrentTime can be greater than 116.6 !!
// Next Frame
// LastTime = 118 // Oops! We expected it to be 116.6 !!
// CurrentTime = 120
while (CurrentTime-LastTime < 16.6)
wasteTimeAndRecalculateCurrentTime();
LastTime = CurrentTime; // Same mistake again! Error accumulates and becomes larger
// Next Frame
// LastTime = 136 (if things were right, this should've been 133.2)
// CurrentTime = 140
.
.
.