1

在 JOGL 中调用 glDrawElementsInstanced() 时,我无法理解将什么用作“索引”参数。

通过查看一些 C++ 教程,似乎只要您想从索引缓冲区的开头开始渲染顶点,您就可以只为索引传递 0。JOGL 要求 indices 参数是一个 Buffer 对象。我尝试在其中创建一个包含一个元素 0 的 IntBuffer,但这不起作用。

当我用它来绘制我的顶点时,我看到在屏幕上绘制的东西:

gl.glDrawElements(GL.GL_TRIANGLES, 10, GL.GL_UNSIGNED_BYTE, 0)

但是当我改用它时,屏幕是黑色的:

gl.glDrawElementsInstanced(
    GL.GL_TRIANGLES, 10, GL.GL_UNSIGNED_BYTE, IntBuffer.wrap(Array(0)), 1
)

当我使用它时,我得到一个类型不匹配的错误:

gl.glDrawElementsInstanced(
    GL.GL_TRIANGLES, 10, GL.GL_UNSIGNED_BYTE, 0, 1
)

我正在使用 OpenGL 4 和 Scala。我还将我的程序设置为使用 DebugGL4,并且没有收到任何错误消息。

4

1 回答 1

2

在 LWJGL 中,它的工作方式几乎相同,当我需要在索引槽中传递零时,我是这样做的:(IntBuffer)null。只需将 null 转换为缓冲区类型。

于 2013-01-19T10:46:27.190 回答