【问题标题】:glGenBuffers() crashing with Segmentation fault. (C++/GLFW/GLEW)glGenBuffers() 因分段错误而崩溃。 (C++/GLFW/GLEW)
【发布时间】:2012-07-01 06:25:00
【问题描述】:

因此,在我的项目中,我使用了一个单独的类来创建名为 Buffer.cpp 的缓冲区。这是构造函数

#define GLEW_STATIC
#define GLEW_NO_GLU
#define GLFW_NO_GLU

#include "GL/glew.h"
#include "GL/glfw.h"

Buffer::Buffer(GLenum _type, const void *data, GLsizei _size, GLenum usage) :  type(_type), size(_size)
{
  ...

  //Generate Buffer
  glGenBuffers(1, &buffer);

  ...
}

以及成员的定义:

GLuint buffer;
const GLsizei size; 
const GLenum type;
Buffer(GLenum, const void*, GLsizei, GLenum);

问题是当我尝试使用例如此命令生成缓冲区时:

Buffer vBuffer(GL_ARRAY_BUFFER, vertexPositions, sizeof(vertexPositions), GL_STATIC_DRAW);

程序在 glGenBuffers() 处崩溃,终止状态为“-1073741819”。我尝试调试程序,这就是我得到的:

Program received signal SIGSEGV, Segmentation fault.

我的卡支持 OpenGL 1.5,所以情况并非如此。

另外值得注意的是,我自己编译了一个静态glew库。

编辑:我终于解决了这个问题。问题是我在创建 OpenGL 渲染上下文之前调用了 glewInit()。

【问题讨论】:

  • 你没有导入 gl.h 吗?只是因为在我没有导入标头并且 GCC 没有抱怨之前发生了奇怪的崩溃
  • 在您接听glGenBuffers() 电话时,您是否拥有当前的glewInit()'d GL 上下文?
  • 是的,在调用 glGenBuffers() 之前,我已经调用了 glewInit()、glfwInit() 和 glfwOpenWindow()。
  • 在 glfwOpenWindow() 之后调用 glewInit() 吗?你的显卡支持 OpenGL 1.5 吗?
  • 哦,谢谢,这就是问题所在。我在 glfwOpenWindow() 之前调用了 glewInit()。

标签: opengl crash segmentation-fault glew glfw


【解决方案1】:

所以你的问题是你在调用 glewInit() 之后创建了 OpenGL 上下文 - 因此 glewInit() 无法正确设置 GL 入口点。

在这种情况下,glewInit() 可能确实返回了错误代码。您是否正在验证函数的错误代码?它应该返回 GLEW_OK。

【讨论】:

  • +1 是的。如果使用glfw,则需要调用glewInit() 之后 glfwMakeContextCurrent(window)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-28
  • 1970-01-01
  • 2014-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多