【问题标题】:Program Crash on glGenVertexArrays callglGenVertexArrays 调用时程序崩溃
【发布时间】:2012-11-26 02:56:04
【问题描述】:

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

它失败了:

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

具体来说:

glGenVertexArrays(1, &VertexArrayID);

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

【问题讨论】:

  • 您是否按照教程Do this once your window is created (= after the OpenGL Context creation) and before any other OpenGL call.中的建议进行操作?
  • @emartel 我复制了教程的源代码,但还是不行。
  • 我明白了,对不起,我不是 OpenGL 专家 :(
  • glGetString(GL_VERSION) 返回什么?

标签: c++ opengl


【解决方案1】:

阅读此thread 后,似乎调用

glewExperimental = GL_TRUE; 
glewInit();

可以解决问题。阅读glewExperimental here,它说

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

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

【讨论】:

  • 哇,GLEW 的言论配得上政治家。基本上,GLEW 并不真正支持核心配置文件 OpenGL 上下文,即使我们已经拥有它们 3 年了。他们在那里有这个hack,他们用它来切换任何阻止他们做other GL loaders在没有显式切换的情况下做得很好的东西。就个人而言,我会说你应该停止使用 GLEW,因为他们多年来一直无法在这方面采取一致行动。
  • 谢谢,这行得通。如果 GLEW 会这么糟糕,我什至可能不会使用它。
  • 感谢您的快速修复。现在我要摆脱我的项目了。
【解决方案2】:

将您的 glew 更新到 2.0.0。这是由this bug 引起的。

【讨论】:

  • 这发生在我的 glew 2.1.0 上。 glewExperimental = GL_TRUE 修复了它。
【解决方案3】:

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

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

注释掉

glewExperimental = GL_TRUE; 

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

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

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

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

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

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

【讨论】:

  • 这与接受的答案有何不同?如果您想添加详细信息,您可以编辑答案并对其进行扩展。或者您可以发表评论,要求澄清或提供新见解。
  • 如果您注意到原始答案中的数据已经超过两年了,所以我验证了在较新版本的 OpenGL 中这仍然是正确的。
  • 感谢您的验证。但是,对已接受的答案进行评论或编辑就足够了,并非每个访问者都向下滚动以阅读所有答案,因此很可能您的验证被许多人错过了。
猜你喜欢
  • 2015-04-09
  • 2012-06-21
  • 2016-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
相关资源
最近更新 更多