- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我不明白为什么这段代码会出现段错误:
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() 时似乎出现段错误。如有必要,我可以发布更多代码,我对 GL 不够熟悉,不知道什么可能是相关的。谢谢!
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 };
产生相同的段错误。
最佳答案
您的 Vertex 类是普通的旧数据类型吗?它是否有任何可能意味着它也有一个 vtable 的虚函数?您能否尝试使用普通 float 组重写此代码(只是为了测试您对 glBufferData 的调用是否有效)。据我所知,您似乎正确使用了 glBufferData,但我可能又漏掉了一些东西。
编辑:在调用此代码之前,您是否绝对确定您的 OpenGL 上下文已完全初始化。这是一个全局对象吗,因为它的构造函数可能在 main 之前被调用?
关于c++ - glBufferData() 的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7054772/
当创建一个 Buffer 并设置它的数据时,需要先将它绑定(bind)到一个 target,然后用一些数据填充绑定(bind)到该 target 的缓冲区: GLenum target = GL_AR
我想知道,如果我使用 glBufferData,它会在我调用它时准确地分配内存吗(也就是说,如果 size 参数大于此时的可用内存,它会崩溃)还是会它有某种特殊的即时规则,仅当我实际将数据复制到缓冲区
我所说的标志是 GL_STREAM_DRAW、GL_STATIC_DRAW 和 GL_DYNAMIC_DRAW。 The manual page is clear about when you sho
我尝试将索引加载到 GL_ELEMENT_ARRAY_BUFFER 中,但是当我尝试此操作时,它会用 0 分隔我的数据。 例如我加载了这些数据: [0 1 3 3 1 2] 使用函数glBufferD
我在 glBufferData 上有随机崩溃,它只发生在 Windows 上。 Mac OS 和 Linux 没有问题。这是我的上传功能,它将我保存在内存中的所有内容上传到 GPU。 vertex 是
我刚刚注意到,当我尝试使用大小:1085859108 和数据:NULL 调用 glBufferData 时,它会无提示地失败。 以下对 glBufferSubData 的调用失败并出现 OUT_OF_
我正在使用明确定义的顶点坐标数组创建 glBufferData,一切正常。使用未明确定义的数组时,结果完全不同,尽管我使用的是相同的坐标值。绘制调用以不同的顶点顺序渲染事物。 顶点是三角形网格。 代码
我正在尝试移植我的固定功能管线 openGL 代码以使用 GLSL,但我遇到了 glBufferData 的段错误。这一切都与固定功能的东西一起工作得很好(即我可以毫无问题地渲染加载的网格)。 这是加
This question询问是否可以依靠编译器不弄乱 struct 的值顺序和填充。 根据该问题的答案, OpenGL defines, very clearly, what the byte la
我不明白为什么这段代码会出现段错误: AxesMarker::AxesMarker(float size) : size_(size), vbo_vertices_(0), vbo_eleme
我正在使用 OpenGL实现某种批量绘图。为此,我创建了一个 vertex buffer来存储数据。 注意:这个缓冲区通常会在每一帧上更新,但永远不会减少大小(但仍然可以增加)。 我的问题是:使用 g
我正在使用 glBufferData 来保存一些渲染信息。 glBufferData(GL_ARRAY_BUFFER, vertex_size * sizeof(VertexData), vertic
在开发过程中,我注意到一个奇怪的“错误”,它只能在 Android 模拟器上重现。我正在使用具有 GPU 加速功能的 x86 版本。请查看以下代码: public class TestRenderer
我正在浏览 OGLdev教程,而且我一直坚持让顶点数组对象工作。相关代码如下: glBindBuffer(GL_ARRAY_BUFFER, buffers[POS_VB]); FloatBuffer
我有这段代码,它不起作用我不知道为什么,我认为它应该,但似乎第一个缓冲区数据被第二个缓冲区数据替换了。我想要实现的是第一个线条粗细与另一个不同, vector vert={-.4,.2,-.2,.6}
这个问题在这里已经有了答案: Can I delete a float array when I have used glBufferData? (2 个答案) When does OpenGL g
我有一个关于 OpenGL glBufferData() 方法的问题。我能否在 std::vector 、std::list 等结构中传递顶点数据,或者它必须是经典的 ( [] ) 数组? 最佳答案
在渲染器的初始化中,VBO被创建并绑定(bind)到GL_ARRAY_BUFFER或GL_ELEMENTS_ARRAY_BUFFER,第一个有三个顶点。调用glBufferData将这三个顶点的属性缓
我创建了一个顶点缓冲区对象类来管理应用程序中的大量顶点。用户调用构造函数创建一个glBuffer,调用glBufferData分配指定大小的空间。 有一个名为 resize 的类函数,允许用户通过再次
我是 OpenGL 的初学者,我正在尝试绘制一个彩色方 block ,我遵循了 OpenGL Book 上的教程。我正在使用示例绘制 here .因为这绘制了一个三角形,所以我修改了代码以绘制 4 个
我是一名优秀的程序员,十分优秀!