gpt4 book ai didi

c++ - SwapBuffers 使我的程序崩溃!

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:20:22 26 4
gpt4 key购买 nike

我有一个 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com