我想用索引缓冲区定义的顺序渲染我的顶点。
如果我使用
glDrawElements(int mode, ByteBuffer indices);
一切正常,但是如果我想将这些数据上传到GL_ELEMENT_ARRAY_BUFFER,我会得到一个黑屏和glError 1281。
这是我的代码:
public void buildBuffer() {
//generate VBOs
FloatBuffer buffer = BufferUtils.createFloatBuffer(this.model.getVertexData().size() * 3);
for (float[] f : this.model.getVertexData()) {
buffer.put(f);
}
buffer.flip();
glBindBuffer(GL_ARRAY_BUFFER, this.vVBO);
glBufferData(GL_ARRAY_BUFFER, buffer, GL_STATIC_DRAW);
ByteBuffer ibuffer = BufferUtils.createByteBuffer(3);
ibuffer.put((byte) 1);
ibuffer.put((byte) 2);
ibuffer.put((byte) 3);
ibuffer.flip();
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, this.iVBO);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, ibuffer, GL_STATIC_DRAW);
glBindVertexArray(this.VAO);
glBindBuffer(GL_ARRAY_BUFFER, this.vVBO);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, false, 0, 0);
glBindVertexArray(0);
}
public void draw() {
this.shader.use();
glBindVertexArray(this.VAO);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, this.iVBO);
glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_BYTE, 0);
glBindVertexArray(0);
Shader.NONE.use();
}
答案 0 :(得分:0)
这很难说,但我会尝试拍摄它。
在绑定顶点数组之前,您永远不会实际创建VAO,您必须将VAO设置为vaoID = GL30.glGenVertexArrays();
。
当您将数据数组放入FloatBuffer时,您不需要for循环。它就像buffer.put(vertices);
一样简单。