- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个 OpenGL 程序可以在我所有的计算机上运行,但只有一台。这是一款配备 Vista 64 和 Radeon HD4850 的台式机。问题似乎出在我对 SwapBuffers(hdc) 的调用中。
它编译得很好,然后给我一个异常:
Program.exe 中 0x00000000 处的未处理异常:0xC0000005:访问冲突。
在调用 SwapBuffers 之前使用 VC++ 中断显示 hdc 的值为:
0xfe011734 {未使用=???}CXX0030: 错误:无法计算表达式
有人知道会发生什么吗?从一台 PC 到另一台 PC,SwapBuffers 有什么变化吗?我已经让它在 XP32、XP64 和(不同的)Vista64 上工作。
while (!quit)
{
if (PeekMessage(&msg, NULL, NULL, NULL, PM_REMOVE))
{
if (msg.message == WM_QUIT)
quit = true;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
renderFrame(); //draws the scene
SwapBuffers(hdc);
if (GetAsyncKeyState(VK_ESCAPE))
shutdown();
think(); //calculates object positions, etc.
}
有问题的系统 (HD4850) 上的驱动程序是最新的。我已经在另一个配备 Radeon HD4870 的 Vista64 系统上运行并编写了该程序,该系统也配备了最新的驱动程序。据我所知,这两张卡的驱动程序几乎相同,因为它们都在 HD48xx 系列中。因此,GPU 导致问题似乎很奇怪。
无论如何,我错了还是这是内存问题? (访问冲突)
此外,如果我删除对 SwapBuffers(hdc) 的调用,程序似乎运行良好,尽管没有绘制任何内容,当然,因为帧缓冲区永远不会被交换。但至少是稳定的。
调用堆栈(-> 是堆栈指针):
ATKOGL32.dll!6aef27bc()
opengl32.dll!665edb2d()
opengl32.dll!665f80d1()
gdi32.dll!75e14104()
-> MyProg.exe!WinMain(HINSTANCE__ * hinstance=0x009a0000, HINSTANCE__ * hprevinstance=0x00000000, char * lpcmdline=0x003b4a51, int nshowcmd=1) Line 259 + 0xe bytes
MyProg.exe!__tmainCRTStartup() Line 578 + 0x35 bytes
MyProg.exe!WinMainCRTStartup() Line 400
kernel32.dll!7641e3f3()
ntdll.dll!777dcfed()
ntdll.dll!777dd1ff()
这是程序集(-> 是下一条要执行的指令):
SwapBuffers(hdc);
009B1B5C mov esi,esp
009B1B5E mov eax,dword ptr [hdc (9BF874h)]
009B1B63 push eax
009B1B64 call dword ptr [__imp__SwapBuffers@4 (0E1040Ch)]
-> 009B1B6A cmp esi,esp
009B1B6C call @ILT+780(__RTC_CheckEsp) (9B1311h)
最佳答案
看起来你可以在窗口被销毁后访问 HDC,如果你一收到 WM_QUIT 就跳出循环,问题会消失吗?
关于c++ - SwapBuffers 使我的程序崩溃!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/668325/
我正在使用多线程 OpenGL 渲染到一个窗口中。如果我按下一个按钮,模型将旋转 5 秒。轮换后,我打印出 FPS。其余时间 OpenGL 什么都不做。模型不会随着时间的推移而改变,所有线程在旋转时都
我有一个 OpenGL 程序可以在我所有的计算机上运行,但只有一台。这是一款配备 Vista 64 和 Radeon HD4850 的台式机。问题似乎出在我对 SwapBuffers(hdc) 的
我正在主窗口中使用 OpenGL 创建一个 Win32 应用程序(不使用 GLUT)。我现在在 WM_PAINT 中有我的绘图代码,当我调用 swapBuffers 时,它必须使自己失效,因为它不断地
我发现 OpenGL 中的 SwapBuffers 将忙于等待,只要显卡未完成渲染或正在等待 V-Sync。 这对我来说是个问题,因为我不想在等待卡完成时浪费 100% 的 CPU 内核。我不是在写游
我正在寻找一种可移植方法来制作非阻塞 SwapBuffers(),即使 VSync 已激活。 换句话说,是否有可能收到事件通知或知道下一个 VSync 之前的延迟? 最佳答案 IIRC 此扩展可帮助:
Vsync 阻塞 SwapBuffers(),这正是我想要的。我的问题是,由于输入消息转到拥有窗口的同一个线程,因此在 SwapBuffers() 被阻止时进入的任何消息都不会立即处理,但只有在 vs
想象这样一种情况: 我使用双缓冲 我可以通过不调用 glClear() 来优化我的绘图代码,如果我假设后台缓冲区的状态与我离开它两个时的状态相同 swapBuffers()前。 我可以依赖这个假设吗?
我正在尝试以 60Fps 而不是 30Fps 运行游戏。游戏锁定为 30fps,因此我可以达到 60fps 的唯一方法是帧插值。 对于插值部分,我将使用 OpenCV,我找到了 this pretty
注意到 WebGL 中不存在 SwapBuffer 功能,如果是这种情况,我们如何在绘制调用中更改状态并在 WebGL 中绘制多个对象,WebGL 在什么时间点在内部调用 swapBuffer? 最佳
我编写了一个 OpenGL 应用程序,它会在某些机器上崩溃(在我自己的测试机器上运行:Windows 8、Windows 7、Windows Vista (x86) - 但在某些装有 Windows
我已经实现了GPUImage framework在我的 cocos2d 项目中,GPUImage 框架是一个 BSD 许可的 iOS 库,可让您将 GPU 加速滤镜和其他效果应用于图像、实时摄像机视频
好的,所以我在 Windows 上遇到了一些与 OpenGL 相关的线程问题。我正在使用 C# .NET 来包装 GL。我在 Windows7 x64 上。 所以我尝试了两种不同的测试。在每次测试中,
我是一名优秀的程序员,十分优秀!