<img src="/mypreview/image/2000" />
和ByteBuffer.allocateDirect()
之间有什么区别?为什么我们在经典OpenGL中使用android glGenBuffers()
而不是ByteBuffer.allocateDirect()
?
答案 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
来表示顶点数组。你应该避免学习这样做的材料,因为他们可能会教你其他不良做法。