OpenGL(Java)中禁用元素阵列缓冲区对象时无法使用偏移量

时间:2017-01-31 02:30:03

标签: java opengl

当我遇到这个问题时,我试图在屏幕上创建一个正方形并对其进行纹理处理,"当禁用元素阵列缓冲区对象时,不能使用偏移量#34;。错误来自该行,

GL11.glDrawElements(GL11.GL_TRIANGLES,model.getVertexCount(),GL11.GL_UNSIGNED_INT,0);

以下是我的一些代码:

渲染器方法:

这会渲染东西

RawModel model = texturedModel.getRawmodel();
GL30.glBindVertexArray(model.getVaoID());
GL20.glEnableVertexAttribArray(0);
GL20.glEnableVertexAttribArray(1);
GL13.glActiveTexture(GL13.GL_TEXTURE0);
GL11.glBindTexture(GL11.GL_TEXTURE_2D,texturedModel.getTexture().getID());
GL11.glDrawElements(GL11.GL_TRIANGLES,model.getVertexCount(),GL11.GL_UNSIGNED_INT,0);
GL20.glDisableVertexAttribArray(0);
GL20.glDisableVertexAttribArray(1);
GL30.glBindVertexArray(0);

bindIndicesBuffer方法:

这会创建一个vbo,将其绑定,并在方法结束时将其解除绑定

int vboID = GL15.glGenBuffers();
vbos.add(vboID);
GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, vboID);
IntBuffer buffer = putIndicesInIntBuffer(indices);
GL15.glBufferData(GL15.GL_ELEMENT_ARRAY_BUFFER, buffer, GL15.GL_STATIC_DRAW);
GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, 0);

我注意到当我删除该行时,

GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, 0);

该程序不会给我这个错误

我认为在不解除绑定的情况下保留绑定的vbo绑定是低效的,但我不确定

我应该解决另一个问题,还是让vbo保持约束状态。

我知道有一些问题可以解决这个问题但是,它们并没有那么大的帮助。

如果我对这个问题感到愚蠢,我很抱歉。我是一个opengl noob,我正在跟进一个教程系列,所以我并不完全理解所有这些代码。 :(

1 个答案:

答案 0 :(得分:1)

元素缓冲区是VAO状态的一部分。因此,当你绑定它时,你真的将它附加到VAO。因此,当您解除绑定时,您不会在VAO中放置任何元素缓冲区。然后你尝试进行索引渲染,没有连接到VAO的元素缓冲区。

所以是的,你需要将元素缓冲区附加到VAO。