13

我正在尝试学习如何在 opengl 中编程并正在使用本教程。教程 1 工作正常,教程 2 崩溃并返回 1。

它失败了:

GLuint VertexArrayID;
glGenVertexArrays(1, &VertexArrayID);
glBindVertexArray(VertexArrayID);

具体来说:

glGenVertexArrays(1, &VertexArrayID);

有什么建议么?与 glGenVertexArrays 调用相关但从未解决的 OpenGL、FreeGlut 和 Glew 崩溃

4

3 回答 3

19

阅读此线程后,似乎调用

glewExperimental = GL_TRUE; 
glewInit();

会解决问题。在这里阅读 glewExperimental ,它说

GLEW 从图形驱动程序获取有关支持的扩展的信息。然而,实验性或预发布驱动程序可能不会通过标准机制报告每个可用的扩展,在这种情况下,GLEW 将报告它不受支持。为了规避这种情况,可以通过在调用 glewInit() 之前将 glewExperimental 全局开关设置为 GL_TRUE 来打开 glewExperimental 全局开关,这样可以确保所有具有有效入口点的扩展都将被公开。

我不太确定这对 glGenVertexArrays 有何帮助,但值得一试

于 2012-11-26T03:36:34.497 回答
1

将您的 glew 更新到 2.0.0。这是由这个错误引起的。

于 2017-04-10T13:11:02.743 回答
0

在 nvidia GPU 和 GLEW 上使用 OpenGL 4.3 这个技巧仍然有效。

我能够使用此修复程序来运行第 8 版 4.3 第 1 章中的“我们的第一个程序:详细讨论”。

注释掉

glewExperimental = GL_TRUE; 

导致未处理的异常,所以我相当肯定这是问题所在。将其添加回代码中,程序按预期运行。

更新答案以澄清原始答案的新内容:

[1] 请注意原始答案上的日期已经超过两年,所以我验证这在较新版本的 OpenGL 中仍然适用。Web 上的 OpenGL 示例代码的一个主要问题是教程内容的老化,这些内容可能仍然有效,但不被认为是最佳实践或最高性能的路径。当我阅读原始答案时,我的想法是:

“嗯,但这已经两年了……GLEW 还没有更新,这个答案已经过时了吗?”,所以现在读者会知道,截至 2014 年 9 月 13 日,这实际上是真的。

[2] 我希望许多读者尝试制作 OpenGL 程序员指南中非常简单的第一个示例来运行,并且它不会没有这个修复。通过包括书名,我希望他们在网络搜索中找到这个答案。

[3] 我指定了平台我确信这可以澄清我没有在所有平台上测试它。

于 2014-09-13T19:46:08.837 回答