我想尝试在我的OpenGL应用程序中启用和禁用VSync。我用winapi创建了一个窗口,并且自己也做了上下文。 我现在有一个旋转的3D立方体,在这种情况下显示纹理,所以我所做的一切都正常。
现在我在窗口中管理VSync会遇到问题。
在我的主机(GTX770SLI,最新驱动程序)上,我的程序崩溃,当我尝试配置VSync时,来自setVSync(bool)
的来电让我的程序崩溃。另一方面,我的笔记本电脑(AMD APU +专用AMD GPU,不知道确切型号,但在2014年左右)对这种代码没有任何问题。
在Nvidia机器上,我可以通过将全局VSync设置更改为自动/关闭来激活/停用驱动程序面板中的VSync。 在AMD机器上,它被设置为“让应用程序决定”。
此代码用于切换VSync:
void setVSync(bool sync)
{
// Function pointer for the wgl extention function we need to enable/disable
// vsync
typedef BOOL(APIENTRY *PFNWGLSWAPINTERVALPROC)(int);
PFNWGLSWAPINTERVALPROC wglSwapIntervalEXT = 0;
const char *extensions = (char*)glGetString(GL_EXTENSIONS);
if (strstr(extensions, "WGL_EXT_swap_control") == 0)
{
cout << "VSync Extension not supported" << endl;
return;
}
else
{
wglSwapIntervalEXT = (PFNWGLSWAPINTERVALPROC)wglGetProcAddress("wglSwapIntervalEXT");
if (wglSwapIntervalEXT)
wglSwapIntervalEXT(sync);
cout << "VSync Extension is supported ! yeah ! " << endl;
}
}
这里有什么不对? TIA!
更新: 崩溃发生在if语句中。我现在使用不同语言的IDE,但它说,我的.exe中的0x6D66E72F(vcruntime140.dll)存在异常: 0xC0000005:读取位置0x00000000时的访问伤害。 好吧,我必须说我在调试方面不是很好。
更新2:
(char*)getString(GL_EXTENSIONS);
返回我的nvidia系统0。