【发布时间】:2015-07-07 10:01:23
【问题描述】:
我在 Android 上使用来自 OpenGL-ES 3.0 的 glMapBufferRange() 的工作代码如下所示:
glBindBuffer(GL_ARRAY_BUFFER, myVertexBufferName);
glBufferData(GL_ARRAY_BUFFER, myVertexBufferSize, null, GL_STATIC_DRAW);
ByteBuffer mappedBuffer = (ByteBuffer)glMapBufferRange(
GL_ARRAY_BUFFER,
0, myVertexBufferSize,
GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT);
// [fill buffer...]
glUnmapBuffer(GL_ARRAY_BUFFER);
我的问题是将第三行的glMapBufferRange() 的结果向下转换为ByteBuffer。 glMapBufferRange() 是declared to return a Buffer:
public static Buffer glMapBufferRange (int target, int offset, int length, int access)
在我的测试平台上,该函数返回ByteBuffer 的子类,因此演员表有效,但对支持 OpenGL-ES 3+ 的所有平台或 Android 版本做出此假设似乎不太安全。虽然看起来很合理,但我没有找到任何保证它的文档,如果它得到保证,似乎该函数应该声明为返回ByteBuffer。
使用glMapBufferRange()返回的Buffer的正确方法是什么(最好有文档支持)?
【问题讨论】:
标签: java android opengl-es opengl-es-3.0