关于glGenVertexArrays调用的程序崩溃

时间:2012-11-26 02:56:04

标签: c++ opengl

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

它失败了:

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

具体做法是:

glGenVertexArrays(1, &VertexArrayID);

有什么建议吗?也相关但从未解决OpenGL, FreeGlut and Glew crash with glGenVertexArrays call

3 个答案:

答案 0 :(得分:18)

阅读此thread后,似乎正在调用

glewExperimental = GL_TRUE; 
glewInit();

会解决问题。阅读glewExperiemental here,它说

  

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

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

答案 1 :(得分:1)

将你的glew更新为2.0.0。这是由this bug引起的。

答案 2 :(得分: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]我指定了平台,我确信这可以澄清我没有在所有平台上测试它。