ByteBuffer.allocateDirect()和glGenBuffers()之间的区别

时间:2017-07-04 14:54:02

标签: java android opengl-es opengl-es-2.0

<img src="/mypreview/image/2000" /> ByteBuffer.allocateDirect()之间有什么区别?为什么我们在经典OpenGL中使用android glGenBuffers()而不是ByteBuffer.allocateDirect()

1 个答案:

答案 0 :(得分:0)

  

但为什么在每个基本的OpenGL教程中都使用OpenGL对象并在每个Android OpenGL ES教程中使用OpenGL对象渲染三角形是用java对象而不是OpenGL对象?

因为他们可以。

ByteBuffer表示CPU内存分配。 OpenGL缓冲区对象表示 GPU - 可访问的内存分配。

OpenGL ES 2.0允许用户从CPU内存或缓冲区对象中指定顶点数据。自2009年以来,桌面核心OpenGL 已移除此功能。因此,现代桌面OpenGL教程将缓冲区对象用于顶点数据。

请注意,ES 3.0明确表示&#34;客户端顶点数组&#34;:

  

用于保持与OpenGL ES 2.0的向后兼容性,但不推荐使用它们,因为这些功能可能会在将来的版本中删除。

他们还没有被删除。但它们确实干扰了许多功能。例如,它们使gl_VertexID未定义。

所以你不应该直接使用ByteBuffer来表示顶点数组。你应该避免学习这样做的材料,因为他们可能会教你其他不良做法。