Сначала я не привык разрабатывать приложения. До сих пор я использовал LWJGL только для компьютерных игр, так что не будь слишком строг со мной:)
Я пытался реализовать класс VAO, который заботится обо всех этих вещах VAO (загрузка VAO, VBO, буферы индексов привязки и т. Д.)
Проблемный фрагмент кода находится в функции bindIndicesBuffer (int [] indices).
Vao.java:
private void bindIndicesBuffer(int[] indices){
int vboID =genBuffers();
vbos.add(vboID);
GLES20.glBindBuffer(GLES20.GL_ELEMENT_ARRAY_BUFFER, vboID);
IntBuffer buffer = Tools.makeIntBuffer(indices);
GLES20.glBufferData(GLES20.GL_ELEMENT_ARRAY_BUFFER, indices.length*4, buffer, GLES20.GL_STATIC_DRAW);
}
Дополнительный код:
private int genBuffers(){
int[] ids = new int[1];
GLES20.glGenBuffers(1, ids, 0);
return ids[0];
}
Tools.java:
public static IntBuffer makeIntBuffer(int[] arr){
ByteBuffer bb = ByteBuffer.allocateDirect(arr.length *4).order(ByteOrder.nativeOrder());
IntBuffer ib = bb.asIntBuffer();
ib.put(arr);
ib.position(0);
ib.flip();
return ib;
}
Класс активности Main вызывает подкласс GLSurfaceView, который создает MasterRenderer, который реализует GLSurfaceView.Renderer и вызывает методы рендеринга отдельных средств визуализации в onDrawFrame ();
Я получаю следующую ошибку:
E / libEGL: вызов API OpenGL ES без текущего контекста (регистрируется один раз для потока)
D / AndroidRuntime: выключение виртуальной машины
E / AndroidRuntime: FATAL EXCEPTION: main
...
Вызвано: java.lang.IllegalArgumentException: оставшиеся () <размер <необходимый </em>
В строке "GLES20.glBufferData (GLES20.GL_ELEMENT_ARRAY_BUFFER, indices.length * 4, буфер, GLES20.GL_STATIC_DRAW);"
А теперь магический вопрос: что я сделал не так? : D
Спасибо за ваше время!