Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl glGenBuffers()因分段错误而崩溃。(C+;+;/GLFW/GLEW)_Opengl_Crash_Segmentation Fault_Glew_Glfw - Fatal编程技术网

Opengl glGenBuffers()因分段错误而崩溃。(C+;+;/GLFW/GLEW)

Opengl glGenBuffers()因分段错误而崩溃。(C+;+;/GLFW/GLEW),opengl,crash,segmentation-fault,glew,glfw,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(_si

因此,在我的项目中,我使用一个单独的类来创建名为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。

您是否未导入总账?只是因为我以前有过奇怪的崩溃,我没有导入头,GCC也没有抱怨,当你调用glGenBuffers()时,你是否已经有了当前的GL上下文了?是的,在调用glGenBuffers()之前,我已经调用了glewInit()、glfwInit()和glfwOpenWindow()。你叫glewInit()吗glfwOpenWindow()之后?你的显卡支持OpenGL 1.5吗?哦,谢谢,这就是问题所在。我在glfwOpenWindow()之前调用了glewInit()。+1是的。如果使用glfw,则需要在
glfwMakeContextCurrent(窗口)
之后调用
glewInit()