OpenGL VBO没有使用glBufferSubData更新

时间:2017-06-14 15:17:25

标签: opengl dynamic binding buffer

我正在尝试更新一个也被VAO引用的VBO。

第一次写入VBO时,数据似乎被接受并正确呈现。 (这是一个抽象的例子,我的VBO是如何被引入的)

GeometryBuilder.BeginSetup(allocatedIndices, BufferUsageHint.StaticDraw, 4);
GeometryBuilder.BeginBuffer(allocatedData, BufferUsageHint.StreamDraw);
GeometryBuilder.BindBufferToAttribute(0, 3, VertexAttribPointerType.Float, false, 48, 0);
GeometryBuilder.BindBufferToAttribute(1, 2, VertexAttribPointerType.Float, false, 48, 12);
GeometryBuilder.BindBufferToAttribute(2, 4, VertexAttribPointerType.Float, false, 48, 20);
GeometryBuilder.BindBufferToAttribute(3, 3, VertexAttribPointerType.Float, false, 48, 36);
GeometryBuilder.EndBuffer();
geometry = GLEXGeometryBuilder.EndSetup();

在GeometryBuilder.BeginBuffer方法中,数据是使用BufferData分配的,之后是使用BufferSubData编写的。

正如我所说。它从" assignedData "呈现数据。正确。 但这是一个动态网格,所以我想用这个来更新VBO:

GL.BindBuffer(BufferTarget.ArrayBuffer, ID);
// Uncommenting this will make my mesh flicker
//GL.BufferData(BufferTarget.ArrayBuffer, (IntPtr)(length * sizeof(float)), IntPtr.Zero, BufferUsageHint.DynamicDraw);
GL.BufferSubData(BufferTarget.ArrayBuffer, (IntPtr)offset, (IntPtr)(length * sizeof(float)), data);
GL.BindBuffer(BufferTarget.ArrayBuffer, 0);

但这甚至不会从" assignedData "中删除原始数据。它仍然没有发生任何事情。(除非我从GL.BufferData删除注释,然后它渲染初始" assignedData "一帧,但在下一帧它已经不见了,等等...) 渲染代码只是绑定VAO并调用DrawArrays。它也适用于所有其他网格。 我还没有在互联网上找到任何解决方案。

这可能是驱动程序错误吗? (在这台PC上有英特尔高清显卡) 或者我会错过其他的东西......

修改

我解决了这个问题。 这是由于上传太少的顶点实际覆盖当前网格造成的。

\ O_O /

0 个答案:

没有答案