【发布时间】: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