EDIT
Я эффективно переписал этот вопрос, чтобы значительно улучшить его качество - см. Журналы изменений, если необходимо
Я сузил свою проблему до фазы инициализации моей программы, когда я пытаюсь создать свой буфер вершин. Код, который я сейчас использую: ...
vaoID = new int[1];
gl.glGenVertexArrays(1, vaoID, 0);
gl.glBindVertexArray(vaoID[0]);
vboID = new int[1];
gl.glGenBuffers(1, vboID, 0);
gl.glBindBuffer(GL4.GL_ARRAY_BUFFER, vboID[0]);
FloatBuffer vData = FloatBuffer.allocate(vertexData.length);
vData.put(vertexData);
vData.rewind();
gl.glBufferData(GL4.GL_ARRAY_BUFFER, vData.capacity() * (Float.SIZE / 8), vData, GL4.GL_STATIC_DRAW);
gl.glBindBuffer(GL4.GL_ARRAY_BUFFER, 0); // With out this line my code throws the exception
gl.glEnableVertexAttribArray(0);
gl.glVertexAttribPointer(0, 4, GL.GL_FLOAT, false, 0, null); // This is the line where the exception is thrown
gl.glBindVertexArray(0);
Так что да, в настоящее время мой код может работать без сбоев, но он должен иметь ошибку в некоторых случаях, поскольку я не могу получить это для рендеринга. Для буферизации данных индекса я использую этот код, который успешно завершается при запуске
gl.glGenBuffers(1, bufferIDs, 0);
gl.glBindBuffer(GL4.GL_ELEMENT_ARRAY_BUFFER, bufferIDs[0]);
ShortBuffer iData = ShortBuffer.allocate(indexData.length);
iData.put(indexData);
iData.rewind();
indexCount = iData.capacity();
gl.glBufferData(GL4.GL_ELEMENT_ARRAY_BUFFER, indexCount * (Short.SIZE / 8), iData, GL4.GL_STATIC_DRAW);
gl.glBindBuffer(GL4.GL_ELEMENT_ARRAY_BUFFER, 0);
Затем, когда дело доходит до рисования, я выполняю следующие шаги, и я не думаю, что это действительно имеет значение, так как я уверен, что я все еще не правильно буферирую в первую очередь
// first I bind my VAO
gl.glBindVertexArray(vaoID[0]);
// then bind, draw, unbind the index buffer
gl.glBindBuffer(GL4.GL_ELEMENT_ARRAY_BUFFER, bufferIDs[0]);
gl.glDrawElements(GL4.GL_POINT, indexCount, GL4.GL_UNSIGNED_SHORT, 0);
gl.glBindBuffer(GL4.GL_ELEMENT_ARRAY_BUFFER, 0);
// finally I unbind the VAO
gl.glBindVertexArray(0);
Я вполне уверен, что это правильный процесс рендеринга буферизованной геометрии. Я подтвердил, что мой код шейдера верен и действителен с помощью некоторых непосредственных команд рисования, поэтому у меня есть полный конвейер, просто кажется, что я не передаю в него данные. В качестве интереса я также попытался отредактировать свой вершинный шейдер, чтобы установить все точки на (0,0,0,1), чтобы, если какие-либо точки были переданы, я их видел, но это не сработало, и я означало, что я не передаю данные в мой шейдер.