У меня есть рабочий код с помощью glMapBufferRange() из OpenGL-ES 3.0 на Android, который выглядит следующим образом:
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() объявлен для возврата Buffer:
public static Buffer glMapBufferRange (int target, int offset, int length, int access)
На моей тестовой платформе функция возвращает подкласс ByteBuffer, поэтому выполнение работ выполняется, но это предположение для всех платформ или версий Android, поддерживающих OpenGL-ES 3+, не кажется очень безопасным. Хотя это кажется разумным, я не нашел никакой документации, которая его гарантирует, и если бы это было гарантировано, кажется, что функция должна быть объявлена как возвращающая ByteBuffer.
Каков правильный способ (желательно поддерживаемый документацией) использования Buffer, возвращаемого glMapBufferRange()?