Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
启用OpenGL三重缓冲+;AMD CCC中的vsync破坏了我们的应用程序 < P>我们有一个用C++编写的桌面Windows应用程序,它使用OpenGL渲染的视图。_C++_Windows_Opengl_Graphics_Driver - Fatal编程技术网

启用OpenGL三重缓冲+;AMD CCC中的vsync破坏了我们的应用程序 < P>我们有一个用C++编写的桌面Windows应用程序,它使用OpenGL渲染的视图。

启用OpenGL三重缓冲+;AMD CCC中的vsync破坏了我们的应用程序 < P>我们有一个用C++编写的桌面Windows应用程序,它使用OpenGL渲染的视图。,c++,windows,opengl,graphics,driver,C++,Windows,Opengl,Graphics,Driver,在一些AMD卡上,如果你打开Catalyst Control Center并强制打开三重缓冲和V-sync,它会破坏我们的应用程序:根本没有渲染,它只是一个灰色屏幕(在其他一些驱动程序版本中,它会在创建上下文时崩溃)。关闭三重缓冲或V-sync都会将其恢复到正常状态 我们使用wglSwapIntervalEXT在我们的应用程序中启用V同步。考虑到它可能会冲突,我删除了它的代码;没有变化 这肯定是一个驱动程序错误,还是我们需要做什么不同的事情来处理三重缓冲?我在自己的应用程序中遇到了同样的问题,并

在一些AMD卡上,如果你打开Catalyst Control Center并强制打开三重缓冲和V-sync,它会破坏我们的应用程序:根本没有渲染,它只是一个灰色屏幕(在其他一些驱动程序版本中,它会在创建上下文时崩溃)。关闭三重缓冲或V-sync都会将其恢复到正常状态

我们使用
wglSwapIntervalEXT
在我们的应用程序中启用V同步。考虑到它可能会冲突,我删除了它的代码;没有变化


这肯定是一个驱动程序错误,还是我们需要做什么不同的事情来处理三重缓冲?

我在自己的应用程序中遇到了同样的问题,并且一直在追查。以下是基于我为复制问题而构建的最小应用程序测试设置,我可以提供的附加信息:

1) 设置像素格式和创建GL RC的所有调用都将成功。但是,GLDebugger将显示RC实际上并不获取静态缓冲区

2) 当您尝试将RC设置为当前时,它将返回false,并且GetLastError()表示存在无效句柄

3) 我只能在MFC中复制这个问题。你用的就是这个吗?当我使用直接的Win32 API构建一个测试床应用程序时,它运行良好。这里肯定有一种模糊的互动

4) 如果我将RC创建延迟到OnCreate之后,那么一切都会正常进行

恐怕我的答案倾向于“驱动程序错误”,但第4点显示了一种解决方法——与其在OnCreate中创建GL窗口,不如在OnInitialUpdate中一次性创建——到目前为止,这对我来说是可行的

更新:我已经就这个问题联系了AMD,结果发现这是MFC最初创建宽度/高度为零的窗口,然后调整大小的结果。如果在预创建函数中指定非零维度,则所有操作都有效


希望这将是一个很好的资源,每个人都试图找出这是怎么回事

我在自己的应用程序中也遇到了同样的问题,追踪这些问题让我非常恼火。以下是基于我为复制问题而构建的最小应用程序测试设置,我可以提供的附加信息:

1) 设置像素格式和创建GL RC的所有调用都将成功。但是,GLDebugger将显示RC实际上并不获取静态缓冲区

2) 当您尝试将RC设置为当前时,它将返回false,并且GetLastError()表示存在无效句柄

3) 我只能在MFC中复制这个问题。你用的就是这个吗?当我使用直接的Win32 API构建一个测试床应用程序时,它运行良好。这里肯定有一种模糊的互动

4) 如果我将RC创建延迟到OnCreate之后,那么一切都会正常进行

恐怕我的答案倾向于“驱动程序错误”,但第4点显示了一种解决方法——与其在OnCreate中创建GL窗口,不如在OnInitialUpdate中一次性创建——到目前为止,这对我来说是可行的

更新:我已经就这个问题联系了AMD,结果发现这是MFC最初创建宽度/高度为零的窗口,然后调整大小的结果。如果在预创建函数中指定非零维度,则所有操作都有效


希望这将是一个很好的资源,每个人都试图找出这是怎么回事

谢谢你的建议!我将试一试,看看它是否能为我们的用户解决任何问题。(关于我们使用MFC,你是对的。)还有更好的消息:我之前就这个问题联系过AMD,他们给了我回复。事实证明,在启用三重缓冲+vsynch的情况下,您的windows在创建时必须具有非零大小。因此,在PreCreateWindow函数中,将cx和cy设置为1。更好的解决方法:)你真幸运!我从未收到过AMD的任何回复,尽管我尝试了多次联系他们。感谢您提供的额外信息,我们将确保使用这两种解决方法!谢谢你的建议!我将试一试,看看它是否能为我们的用户解决任何问题。(关于我们使用MFC,你是对的。)还有更好的消息:我之前就这个问题联系过AMD,他们给了我回复。事实证明,在启用三重缓冲+vsynch的情况下,您的windows在创建时必须具有非零大小。因此,在PreCreateWindow函数中,将cx和cy设置为1。更好的解决方法:)你真幸运!我从未收到过AMD的任何回复,尽管我尝试了多次联系他们。感谢您提供的额外信息,我们将确保使用这两种解决方法!