glGenVertexArrays调用上的程序崩溃

Program Crash on glGenVertexArrays call

本文关键字:程序 崩溃 调用 glGenVertexArrays      更新时间:2023-10-16

我正在尝试学习如何在opengl中编程,并使用本教程。教程1运行良好,教程2因返回1而崩溃。

它在以下方面失败:

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

具体而言:

glGenVertexArrays(1, &VertexArrayID);

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

读取此线程后,调用

glewExperimental = GL_TRUE; 
glewInit();

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

GLEW从图形中获取有关支持的扩展的信息驾驶员然而,实验或预发布驱动程序可能不会报告通过标准机制的每个可用扩展,其中案例GLEW将报告它不受支持。为了避免这种情况,glewExperimental全局开关可以通过将其设置为GL_TRUE,然后调用glewInit(),这样可以确保所有扩展具有有效入口点的将被暴露。

我不太确定这对glGenVertexArrays有什么帮助,但值得尝试

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

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

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

注释

glewExperimental = GL_TRUE; 

导致一个未处理的异常,所以我很确定这就是问题所在。将它重新添加到代码中,程序就会按预期运行。

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

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

"好吧,但这已经两年了。。。GLEW仍然没有更新,并且这个答案已经过时了吗?',所以现在读者会知道,截至2014年9月13日,这是事实。

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

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