【发布时间】:2011-12-06 10:44:44
【问题描述】:
编辑
我已经有效地重写了这个问题以大大提高它的质量 - 如果你必须查看修订日志
当我尝试创建顶点缓冲区时,我已将问题缩小到程序的初始化阶段。我目前使用的代码是...
vaoID = new int[1];
gl.glGenVertexArrays(1, vaoID, 0);
gl.glBindVertexArray(vaoID[0]);
vboID = new int[1];
gl.glGenBuffers(1, vboID, 0);
gl.glBindBuffer(GL4.GL_ARRAY_BUFFER, vboID[0]);
FloatBuffer vData = FloatBuffer.allocate(vertexData.length);
vData.put(vertexData);
vData.rewind();
gl.glBufferData(GL4.GL_ARRAY_BUFFER, vData.capacity() * (Float.SIZE / 8), vData, GL4.GL_STATIC_DRAW);
gl.glBindBuffer(GL4.GL_ARRAY_BUFFER, 0); // With out this line my code throws the exception
gl.glEnableVertexAttribArray(0);
gl.glVertexAttribPointer(0, 4, GL.GL_FLOAT, false, 0, null); // This is the line where the exception is thrown
gl.glBindVertexArray(0);
所以是的,目前我的代码能够在不崩溃的情况下运行,但它一定有一个错误,因为我无法让它呈现。对于缓冲索引数据,我使用了这段代码,它在运行时成功完成
gl.glGenBuffers(1, bufferIDs, 0);
gl.glBindBuffer(GL4.GL_ELEMENT_ARRAY_BUFFER, bufferIDs[0]);
ShortBuffer iData = ShortBuffer.allocate(indexData.length);
iData.put(indexData);
iData.rewind();
indexCount = iData.capacity();
gl.glBufferData(GL4.GL_ELEMENT_ARRAY_BUFFER, indexCount * (Short.SIZE / 8), iData, GL4.GL_STATIC_DRAW);
gl.glBindBuffer(GL4.GL_ELEMENT_ARRAY_BUFFER, 0);
然后在绘图方面,我执行以下步骤,我认为这并不重要,因为我确信我仍然没有正确缓冲
// first I bind my VAO
gl.glBindVertexArray(vaoID[0]);
// then bind, draw, unbind the index buffer
gl.glBindBuffer(GL4.GL_ELEMENT_ARRAY_BUFFER, bufferIDs[0]);
gl.glDrawElements(GL4.GL_POINT, indexCount, GL4.GL_UNSIGNED_SHORT, 0);
gl.glBindBuffer(GL4.GL_ELEMENT_ARRAY_BUFFER, 0);
// finally I unbind the VAO
gl.glBindVertexArray(0);
我相当确定这是渲染缓冲几何的正确过程。我已经通过使用一些即时绘图命令确认我的着色器代码是正确且有效的,所以我有完整的管道,只是似乎我没有向其中输入数据。作为一个兴趣点,我还尝试编辑我的顶点着色器以将所有点设置为(0,0,0,1),这样如果有任何点被传入,我应该看到它们,但这不起作用,我这意味着我一开始没有将数据传递到我的着色器中。
【问题讨论】:
-
您的初始化代码是否完整发布?你似乎是 glDisabling 东西而没有 glEnabling 它。
标签: java opengl language-agnostic jogl vbo