C++ glBufferData()的分段错误
我不明白为什么这个代码是seg错误:C++ glBufferData()的分段错误,c++,opengl,segmentation-fault,glut,C++,Opengl,Segmentation Fault,Glut,我不明白为什么这个代码是seg错误: AxesMarker::AxesMarker(float size) : size_(size), vbo_vertices_(0), vbo_elements_(0) { Vertex vertices[6] = { Vertex(Color4f::RED, Vector3f::ZERO, Vector3f::ZERO), Vertex(Color4f::RED, Vector3f::ZERO, Vector3f(si
AxesMarker::AxesMarker(float size)
: size_(size), vbo_vertices_(0), vbo_elements_(0)
{
Vertex vertices[6] = {
Vertex(Color4f::RED, Vector3f::ZERO, Vector3f::ZERO),
Vertex(Color4f::RED, Vector3f::ZERO, Vector3f(size_, 0.0f, 0.0f)),
Vertex(Color4f::BLUE, Vector3f::ZERO, Vector3f::ZERO),
Vertex(Color4f::BLUE, Vector3f::ZERO, Vector3f(0.0f, size_, 0.0f)),
Vertex(Color4f::GREEN, Vector3f::ZERO, Vector3f::ZERO),
Vertex(Color4f::GREEN, Vector3f::ZERO, Vector3f(0.0f, size_, 0.0f)) };
GLuint elements[6] = { 0, 1, 2, 3, 4, 5 };
fprintf(stderr, "sizeof(vertices): %d, sizeof(Vertex): %d", (int) sizeof(vertices), (int) sizeof(Vertex));
/* create buffers */
glGenBuffers(1, &vbo_vertices_);
glGenBuffers(1, &vbo_elements_);
/* bind buffers */
glBindBuffer(GL_ARRAY_BUFFER, vbo_vertices_);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vbo_elements_);
/* buffer data */
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(elements), elements, GL_STATIC_DRAW);
/* unbind buffers */
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
}
编译时没有警告,但在第一次调用glBufferData()时似乎存在seg错误。
如果需要,我可以发布更多的代码,我对GL不够熟悉,不知道什么可能是相关的。
谢谢
产生相同的seg错误。您的Vertex类是普通的旧数据类型吗?它是否有任何虚拟功能,这可能意味着它也有一个vtable?您是否可以尝试使用普通浮点数组重新编写此代码(只是为了测试对glBufferData的调用是否正常工作)。但从我所能看出的情况来看,您似乎正确地使用了glBufferData,但我可能还是漏掉了一些东西 编辑:
在调用此代码之前,是否绝对确保OpenGL上下文已完全初始化。这是一个全局对象,因为它的构造函数可能在main之前被调用吗?它们都是结构,我会试试。啊,所以这是实时的。那我最好别再那么拼命帮忙了。:)你在用Glew吗?你记得在调用openGL之前调用glewInit吗?我没有这样做,但它没有改变任何事情。。。我只是不明白为什么glBufferData读取的数据超过了数组的末尾。正如我前面所说的,我看不出您调用代码的方式有任何错误。在调用此代码之前,是否绝对确保OpenGL上下文已完全初始化。这是一个全局对象吗,因为它的构造函数可能在main之前被调用?
GLfloat vertices[60] = {
1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f,
0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f,
0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f };