glGenBuffers()因Segmentation故障而崩溃.(C++/GLFW/GLEW)

str*_*inf 9 opengl crash glew segmentation-fault glfw

所以,在我的项目中,我使用一个单独的类来创建名为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);

  ...
}
Run Code Online (Sandbox Code Playgroud)

成员的定义:

GLuint buffer;
const GLsizei size; 
const GLenum type;
Buffer(GLenum, const void*, GLsizei, GLenum);
Run Code Online (Sandbox Code Playgroud)

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

Buffer vBuffer(GL_ARRAY_BUFFER, vertexPositions, sizeof(vertexPositions), GL_STATIC_DRAW);
Run Code Online (Sandbox Code Playgroud)

程序在glGenBuffers()崩溃,终止状态为"-1073741819".我试过调试程序,这就是我得到的:

Program received signal SIGSEGV, Segmentation fault.
Run Code Online (Sandbox Code Playgroud)

我的卡支持OpenGL 1.5,但事实并非如此.

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

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

Mār*_*iko 17

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

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

  • +1是的.如果使用glfw,则需要调用`glewInit()`_ after_`glfwMakeContextCurrent(window)`. (5认同)