Mam kod jest wykonywana przy użyciu glMapBufferRange()
z OpenGL ES 3.0 na Androida, które wygląda następująco:Bezpieczne korzystanie z glMapBufferRange() na Android/Java
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);
Moje pytanie jest o rzutowanie w dół wynik glMapBufferRange()
do ByteBuffer
na trzecia linia. glMapBufferRange()
jest declared to return a Buffer
:
public static Buffer glMapBufferRange (int target, int offset, int length, int access)
Na moim platformy testowej funkcja zwraca podklasę ByteBuffer
tak pracach odkrywkowych, ale czyni to założenie dla wszystkich platform lub wersji Android wspiera OpenGL ES 3+ nie robi wydaje się bardzo bezpieczny. Chociaż wydaje się to uzasadnione, nie znalazłem żadnej dokumentacji, która by to zagwarantowała, a gdyby było zagwarantowane, wydaje się, że funkcja powinna zostać zadeklarowana jako zwracająca ByteBuffer
.
Jaki jest poprawny sposób (najlepiej obsługiwany przez dokumentację) korzystania z Buffer
zwrócony przez glMapBufferRange()
?
+1 za przejście do realizacji. Wdrożenie może się jednak zmienić, przynajmniej w teorii. Czy istnieje sposób na praktyczne wykorzystanie 'glMapBufferRange()' bez przyjmowania założeń dotyczących implementacji? Czy ta funkcja jest niewłaściwie określona? – rhashimoto
@rhashimoto Dodałem trochę treści. Ale ta część była już dla ciebie jasna. –
Myślę, że większość ludzi nie ma możliwości korzystania z ES 3.0+ lub OpenGL przez JNI na cokolwiek poważnego. Otworzyłem nagrodę za więcej ekspozycji. – rhashimoto