glNamedBufferData fires GL_INVALID_OPERATION



我在样本的开头得到一个异常,当我尝试在这里和这里为gound分配几何体时:

此时

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]

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

一切似乎都对

无论如何,error 0x502GL_INVALID_OPERATION的,只有在以下情况下才会触发glNamedBufferData

- 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需要一个由于glNamedBufferData而我没有提供的目标,

看看这里,如果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

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

缓冲区对象是通过将 GenBuffers 返回的名称绑定到 缓冲区目标。绑定通过调用

void BindBuffer( enum target, uint buffer );

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

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

相关内容

  • 没有找到相关文章

最新更新