我目前使用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