我有一个我在macOS上开发的OpenGL应用程序。我在代码中调用了glDrawElements
段错误。我链接OpenGL.framework
文件并添加<OpenGL/gl.h>
。但是,如果我包含<OpenGL/gl3.h>
,程序不会出现段错误,并且它或多或少会按预期工作(我仍然会收到无效的操作调用,但网格会绘制到屏幕上)。这是扩展加载问题吗?我没有使用GLEW或任何扩展加载库。我正在创建一个2.1版本的上下文。
Here是我设置OpenGL数据的地方,here是我实际绘图的地方。我还要注意,这在Linux机器上运行并没有问题。它似乎只是macOS我遇到了段错误。
这是堆栈跟踪:
(lldb) bt
* thread #1: tid = 0x206bb7, 0x00007fff92a330d0 libsystem_platform.dylib`_platform_memmove$VARIANT$Nehalem + 112, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x0)
* frame #0: 0x00007fff92a330d0 libsystem_platform.dylib`_platform_memmove$VARIANT$Nehalem + 112
frame #1: 0x00007fff78853c86 GeForceGLDriver`___lldb_unnamed_symbol5651$$GeForceGLDriver + 187
frame #2: 0x00007fff78855102 GeForceGLDriver`___lldb_unnamed_symbol5659$$GeForceGLDriver + 771
frame #3: 0x00007fff789710fe GeForceGLDriver`___lldb_unnamed_symbol10497$$GeForceGLDriver + 393
frame #4: 0x00007fff8227a15f GLEngine`glDrawElements_Exec + 271
frame #5: 0x0000000100030fb4 mcomp`GLRender::DrawModel(this=0x00007fff5fbff7f8, model=0x0000000100770e20) + 5956 at glrender.cc:202
frame #6: 0x0000000100003fa7 mcomp`Mcomp::Update(this=0x00007fff5fbff7b8) + 423 at mcomp.cc:27
frame #7: 0x0000000100007941 mcomp`Engine::Run(this=0x00007fff5fbff798) + 65 at engine.cc:22
frame #8: 0x00000001000026ea mcomp`main(argc=1, argv=0x00007fff5fbffa00) + 378 at main.cc:21
frame #9: 0x00007fff92826255 libdyld.dylib`start + 1
(lldb)
答案 0 :(得分:2)
我在这里看到了一些错误。
作为参考,以下是我通常设置VAO的顺序:
这应该设置一切。要绘制,使用相关的着色器程序,绑定VAO并调用glDrawElements()
编辑:您能概述为什么要创建2.x上下文,而不是3.x或4.x上下文?使用缓冲区绘制和VAO是现代OpenGL渲染方式。为什么不将上下文版本与该级别匹配?