私はOpenGLプログラムを持っていますが、私のすべてのコンピュータで動作します。それは、Vista 64とRadeon HD4850を搭載したデスクトップです。この問題は、SwapBuffers(hdc)の呼び出しのようです。プログラムをクラッシュさせるSwapBuffers!
それは罰金コンパイルしてから、私に例外を与える:0xc0000005で:PROGRAM.EXEで0x00000000ので
未処理の例外違反をACCES。 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システム上のプログラムを実行して書きました。最新のドライバもあります。私が知る限り、これらの2つのカードのドライバは、両方ともHD48xxシリーズのものとほぼ同じです。その理由から、GPUが問題を引き起こしていることは奇妙に思えます。
とにかく、私は間違っていますか、これは記憶上の問題ですか? (アクセス違反)
また、SwapBuffers(hdc)の呼び出しを取り除くと、プログラムは一見うまく実行されますが、フレームバッファはスワップされないため、何も描画されません。しかし少なくとも安定しています。
コールスタック( - > ptrをスタックされる):相続人
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 [[email protected] (0E1040Ch)]
-> 009B1B6A cmp esi,esp
009B1B6C call @ILT+780(__RTC_CheckEsp) (9B1311h)
私はこの質問をした後2年以上、他の技術フォーラムサイトの複数の投稿と同じように、私はまだこのカードの問題を解決できませんでした。私はコンピュータを再起動するたびにドライバを再インストールする必要があります。私はカードが間違っていると確信しています...あなたがおそらく最も近いのであなたの答えを受け入れるでしょう。 –
「glFlush();」を追加してみてください。 "SwapBuffers"を呼び出す前に – Gediminas