Why do I get error INVALID_OPERATION when I call glMultiDrawElementsIndirect(为什么在调用glMultiDrawElementsInDirect时出现INVALID_OPERATION错误)
问题描述
我当前正在尝试将glMultiDrawElementsIndirect
与Java中的LWJGL一起使用,但出现错误INVALID_OPERATION。
glMultiDrawElementsIndirect(GL_TRIANGLES, GL_UNSIGNED_INT, this.modelManager.indirect, NB_TYPE_MESH, 0);
我在文档中看到此错误与GL_DRAW_INDIRECT_BUFFER
或GL_ELEMENT_ARRAY_BUFFER
有关,但我不知道问题在我的代码中的哪里。
间接缓冲区
int[] indirect = new int[NB_TYPE_MESH*5];
for(int i=0; i<2; i++) {
indirect[i] = getElementCount().get(i);
indirect[1+i] = Game.NB_MAX_OBJECTS/2;
indirect[2+i] = 0;
indirect[3+i] = i==0?0:getElementCount().get(i-1);
indirect[4+i] = i; // maybe 0
}
vboIdIndirect = glGenBuffers();
IntBuffer gIndirectBuffer = MemoryUtil.memAllocInt(indirect.length);
gIndirectBuffer.put(indirect).flip();
glBindBuffer(GL_DRAW_INDIRECT_BUFFER, vboIdIndirect);
glBufferData(GL_DRAW_INDIRECT_BUFFER, gIndirectBuffer, GL_DYNAMIC_DRAW);
和我的元素缓冲区
vboId = glGenBuffers();
vboIdList.add(vboId);
indicesBuffer = MemoryUtil.memAllocInt(indices.length);
indicesBuffer.put(indices).flip();
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vboId);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, indicesBuffer, GL_DYNAMIC_DRAW);
索引包含NB_TYPE_MESH
网格类型的索引
推荐答案
如果在调用glMultiDrawElementsIndirect
时将缓冲区绑定到目标GL_DRAW_INDIRECT_BUFFER
,间接参数将被解释为进入此缓冲区的以基本计算机单位为单位的偏移量。
因此在绘制元素之前需要绑定GL_DRAW_INDIRECT_BUFFER
,但间接参数必须为null
:
glMultiDrawElementsIndirect(GL_TRIANGLES, GL_UNSIGNED_INT, this.modelManager.indirect, NB_TYPE_MESH, 0);
glBindBuffer(GL_DRAW_INDIRECT_BUFFER, vboIdIndirect);
glMultiDrawElementsIndirect(GL_TRIANGLES, GL_UNSIGNED_INT, null, NB_TYPE_MESH, 0);
另见Java Code Examples glMultiDrawElementsIndirect()
这篇关于为什么在调用glMultiDrawElementsInDirect时出现INVALID_OPERATION错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:为什么在调用glMultiDrawElementsInDirect时出现INVALID_OPERATION错误
基础教程推荐
- 由于对所需库 rt.jar 的限制,对类的访问限制? 2022-01-01
- 如何强制对超级方法进行多态调用? 2022-01-01
- Spring Boot Freemarker从2.2.0升级失败 2022-01-01
- 在螺旋中写一个字符串 2022-01-01
- 如何对 HashSet 进行排序? 2022-01-01
- 如何使用 Eclipse 检查调试符号状态? 2022-01-01
- 首次使用 Hadoop,MapReduce Job 不运行 Reduce Phase 2022-01-01
- 如何使用 Stream 在集合中拆分奇数和偶数以及两者的总和 2022-01-01
- 如何在不安装整个 WTP 包的情况下将 Tomcat 8 添加到 Eclipse Kepler 2022-01-01
- Java 中保存最后 N 个元素的大小受限队列 2022-01-01