PDA

View Full Version : wgl.h



leepatton
08-27-2002, 12:41 PM
RE: VSYNC and Extensions

I am trying swapbuffers without waiting for the vertical blank of the monitor. Word on the street is that the following code will work:

wglSwapControl = (PFNWGLEXTSWAPCONTROLPROC) wglGetProcAddress("wglSwapIntervalEXT");
wglSwapControl(0);

At first the problem was that I did't have "wgl.h" on my machine. So, I went and found it. But, the version I found has a #include for "gdi.h", which I don't have either. I found "gdi.h", but it has a #include for "super.h." I can't find this file, and I bet that when I do, it will have some other dependancy. Can anybody help me. I would really appreciate it. Google and MSDN have nothing left for me!

Cheers,
- Lee


[This message has been edited by leepatton (edited 08-28-2002).]

swall
09-04-2002, 08:02 AM
I believe the WGL routines are defined via the "windows.h" include file. I'm assuming you're coding in Win32 since you're using a 'wgl*' prefixed procedure.

leepatton
09-04-2002, 08:12 AM
Thanks, but I have included 'windows.h,' and I still get the following errors:

--------------------Configuration: vbOpenGL - Win32 Debug--------------------
Compiling...
vbOpenGL.cpp
E:\TestDLL\vbOpenGL\Src\vbOpenGL.cpp(61) : error C2065: 'wglSwapControl' : undeclared identifier
E:\TestDLL\vbOpenGL\Src\vbOpenGL.cpp(61) : error C2065: 'PFNWGLEXTSWAPCONTROLPROC' : undeclared identifier
E:\TestDLL\vbOpenGL\Src\vbOpenGL.cpp(61) : error C2146: syntax error : missing ';' before identifier 'wglGetProcAddress'
Error executing cl.exe.

vbOpenGL.dll - 3 error(s), 0 warning(s)
---------------------------------------------

marcus256
09-04-2002, 10:30 AM
To avoid problems, you can do the declarations yourself:



// Typedef (I use my own naming convention here)
typedef int (APIENTRY * WGLSWAPINTERVALEXT_T) (int interval);

// Function pointer
WGLSWAPINTERVALEXT_T wglSwapIntervalEXT;

// Code
wglSwapIntervalEXT = (WGLSWAPINTERVALEXT_T) wglGetProcAddress( "wglSwapIntervalEXT" );
if( wglSwapIntervalEXT )
{
wglSwapIntervalEXT( 0 );
}

...should work.

leepatton
09-05-2002, 10:39 AM
Thanks. The code compiled beautifully, but it seems that the address of wglSwapIntervalEXT is not being returned by wglGetProcAddress. Hmm... I'll admit very quickly that I am no C++ expert. Perhaps there is something else I'm doing incorrectly. I'm writing a dll in C++ to be called from VB. Here's what I have:

in the header:



typedef int (APIENTRY *WGLSWAPINTERVALEXT_T) (int interval);
WGLSWAPINTERVALEXT_T wglSwapIntervalEXT;


and here's the function:



int __stdcall vsync( int enable)
{
// outline: this function enables (1) disables (0) the syncronizaiton of the swapbuffers
// command to the vertical blank of the monitor


wglSwapIntervalEXT = (WGLSWAPINTERVALEXT_T) wglGetProcAddress( "wglSwapIntervalEXT" );

if( wglSwapIntervalEXT )
{

// enable/disable vsync according to input
if(enable == 1)
{
wglSwapIntervalEXT( 0);
}
else
{
wglSwapIntervalEXT( 1);
}

// return success
return 1;


}else
{
// return failure
return 0;
}


}



[This message has been edited by leepatton (edited 09-05-2002).]

leepatton
09-09-2002, 11:17 AM
Correction... I am developing this app to run on a number of different platforms, and it was the platform I was testing this routine on that didn't support wglSwapIntervalEXT. I got it to work on an NVIDIA platform. Thanks for all the help.

Cheers