opengl - glGenBuffers() 因段错误而崩溃。 (C++/GLFW/GLEW)

标签 opengl crash segmentation-fault glew 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);

  ...
}

以及成员的定义:
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()。

最佳答案

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

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

关于opengl - glGenBuffers() 因段错误而崩溃。 (C++/GLFW/GLEW),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11266567/

相关文章:

iphone - NSNotificationCenter 相关的 iOS 3.2 崩溃

调用 free() 导致我的程序崩溃

c++ map 不返回 end() 即使它应该

c++ - 使用 OpenGL 在 C++ 中绘制 8 x 15 矩形网格 - 崩溃

c++ - OpenGL-计算NDC中的位置可在着色器中使用,但不能在 'regular'程序中使用

c++ - 尝试了解输入顶点的 OpenGL 着色器

C++ 在 try-catch 语句处崩溃

c - 当我将其制作为 exe 时,我的 C 代码中不断出现段错误

c - mac终端报段错误

opengl - 如何在可执行文件和DLL之间使用OpenGL函数指针?