PDA

View Full Version : "EXT_swap_control extension" unexpected behaviour



Daniel Dekkers
05-19-2009, 04:53 AM
Hi,

I've just "implemented" the EXT_swap_control extension. I set the "video frame period" with the wglSwapIntervalEXT(int interval) function.

My lcd-screen refresh rate is 60 Hz, or so says the property window.

If I pass an interval value of 0, I (indeed) get a fps of 500+ (no vsync). But passing 1 gives 120 (?). Passing 2 gives 60, passing 3 gives 40, passing 4 gives 20...

Why would passing an interval value of 1 give a fps result that doubles the monitor refresh rate?

I'm working on a MacBook Pro with XP32 under bootcamp. It has an nVidia 8600M GT videocard. But other computers give simular results. I have a standard double-buffered render loop:
Render(...);
glFlush();
SwapBuffers(...);

Kind Regards,
Daniel Dekkers

martinsm
05-19-2009, 05:07 AM
Try taking out glFlush function.
Also how do you measure fps?

Daniel Dekkers
05-19-2009, 06:07 AM
Removing glFlush doesn't change the fps results.
I'm using this function with a high-resolution counter c_StopWatch...

std::wstring
c_WindowOpenGL::GetFrameRate(void)
{
static bool l_StopWatchCounting = false;
static int l_Fps = -1;
std::wstring l_String;
static c_StopWatch l_StopWatch;
static int l_NrOfFrames;

if (!l_StopWatchCounting)
{
// Initialise the StopWatch...
l_StopWatch.SetTime(0.0);
l_StopWatch.ResumeTime();
l_StopWatchCounting = true;
return TEXT("FPS: NA");
}
else
{
if (l_StopWatch.ElapsedTime()>1.0)
{
// We have a valid frame rate for this second...
l_Fps = l_NrOfFrames;
// Reset the stopwatch...
l_NrOfFrames = 0;
l_StopWatch.SetTime(0.0);
l_StopWatch.ResumeTime();
}
else
{
// Add 1 to the frame rate counter...
++l_NrOfFrames;
}

if (l_Fps==-1)
{
return TEXT("FPS: NA");
}
else
{
return str(boost::wformat(TEXT("FPS: %d")) % l_Fps);
}
}
}

dletozeun
05-19-2009, 07:57 AM
Did you read the spec?
http://www.opengl.org/registry/specs/EXT/wgl_swap_control.txt

Actually I do understand myself this sentence:



An interval set to a value of 2
means that the color buffers will be swapped at most every other video
frame.

ZbuffeR
05-19-2009, 08:17 AM
It sounds like you count your frames twice.
For 60hz lcd, I always have :
0: inf+
1: 60
2: 30
3: 20
... never tried farther.