我目前使用SDL 1.2.4和C++ Builder 10.0 Seattle。我已經建立了一個簡單的測試程序來檢查一切是否正常工作。openGL - 調用glMatrixMode時訪問衝突(...)
下面的代碼編譯沒有警告或錯誤,但給了我一個運行時錯誤:
Exception-Klasse $C0000005 mit Meldung 'access violation at 0x68cc46f5: read of address 0x00001701'. Prozess Project1.exe (2624)
int _tmain(int argc, _TCHAR* argv[]) {
SDL_Init(SDL_INIT_VIDEO);
SDL_SetVideoMode(640, 480, 32, SDL_OPENGL);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(70,(double)640/480,1,1000);
while (true) {
SDL_PumpEvents();
}
return 0;
}
如果我刪除glMatrixMode(...)
,代碼「作品」,這意味着會彈出一個窗口,但不顯示任何內容。所以MatrixMode似乎是這裏的問題。
您可以檢查是否調用'SDL_SetVideoMode(640,480,32,SDL_OPENGL);'實際上是成功的。請參閱此處的示例:https://www.libsdl.org/release/SDL-1.2.15/docs/html/sdlglsetattribute.html – vcp
也許SDL使用具有核心配置文件的現代OpenGL3上下文。包含矩陣的棄用函數被刪除,因此glMatrixMode的函數指針爲NULL(這解釋了訪問衝突)。 – Youka