Android OpenGLES осталось () <размер <необходим - PullRequest
0 голосов
/ 12 сентября 2018

Сначала я не привык разрабатывать приложения. До сих пор я использовал 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

Спасибо за ваше время!

...