glNamedBufferData触发GL_INVALID_OPERATION

时间:2015-04-20 09:23:20

标签: buffer jogl invalidoperationexception opengl-4

我在我的示例开始时遇到异常,当我尝试为gound分配几何时,herehere

此时

gl4.glNamedBufferData(vertexBuffer[0], Vertex.size() * vertices.size(),
                floatBuffer, GL4.GL_STATIC_DRAW);

例外:

Caused by: com.jogamp.opengl.GLException: GL-Error 0x502 while creating mutable storage for buffer 1 of size 512 with data java.nio.DirectFloatBufferU[pos=0 lim=128 cap=128]

我的对象Vertex需要128个浮点数,我有4个顶点,这意味着512个字节

一切似乎都是正确的

无论如何,error 0x502 GL_INVALID_OPERATIONglNamedBufferData会触发only如果:{/ p>

- GL_INVALID_OPERATION is generated by glNamedBufferData if buffer is not the name of an existing buffer object.

- GL_INVALID_OPERATION is generated if the GL_BUFFER_IMMUTABLE_STORAGE flag of the buffer object is GL_TRUE. 

由于存在缓冲区(!= 01),它必须是第二个

但是我无法查询任何GL_BUFFER_IMMUTABLE_STORAGE标记,因为glGetBufferParameter requires因为glNamedBufferData而未提供的目标,

并查看here,如果mutableUsage为假,我会抓住内部错误,我没有,所以..

有什么想法吗?

gl4.glBindBuffer(GL4.GL_ARRAY_BUFFER, vertexBuffer[0]);
gl4.glBufferData(GL4.GL_ARRAY_BUFFER, Vertex.size() * vertices.size(), floatBuffer, GL4.GL_STATIC_DRAW);
gl4.glBindBuffer(GL4.GL_ARRAY_BUFFER, 0);

它就像一个魅力,我相信我有GL 4.5

gl4.glGetString(GL4.GL_VERSION) 4.5.0 NVIDIA 347.88

gl4.isExtensionAvailable("GL_ARB_direct_state_access" true

1 个答案:

答案 0 :(得分:3)

OpenGL 4.5规范 - 6.1创建和绑定缓冲区对象:

  

通过绑定GenBuffers返回的名称来创建缓冲区对象   缓冲目标。通过调用

实现绑定
void BindBuffer( enum target, uint buffer );
     

目标必须是表6.1中列出的目标之一。如果名为buffer的缓冲区对象先前未绑定,则GL   创建一个新的状态向量,使用零大小的内存进行初始化   缓冲并包含所有状态和相同的初始值   见表6.2。

因此glGenBuffers和glCreateBuffers之间的区别在于glGenBuffers只返回一个未使用的名称,而glCreateBuffers也创建并初始化上述状态向量。