Код: Выделить всё
bufferGen.VaoVboSet(2);
bufferGen.setBuffers(0, 0, vertices.verticesofLight);
GL46.glVertexAttribPointer(0, 3, GL46.GL_FLOAT, false, 5 * Float.BYTES, 0);
GL46.glEnableVertexAttribArray(0);
// Set up the second VAO and VBO for the light
bufferGen.setBuffers(1, 1, vertices.verticesofLight);
GL46.glVertexAttribPointer(1, 3, GL46.GL_FLOAT, false, 3 * Float.BYTES, 0);
GL46.glEnableVertexAttribArray(1);
Код: Выделить всё
int[] VAO;
int[] VBO;
Vertices vertices = new Vertices();
public void VaoVboSet(int size) {
VBO = new int[size];
VAO = new int[size];
GL46.glGenVertexArrays(getVAO());
GL46.glGenBuffers(getVBO());
}
public int[] getVAO(){
return VAO;
}
public int[] getVBO(){
return VBO;
}
public void setBuffers(int VaoId, int VboId,float vertices[]){
GL46.glBindVertexArray(VAO[VaoId]);
GL46.glBindBuffer(GL46.GL_ARRAY_BUFFER, VBO[VboId]);
GL46.glBufferData(GL46.GL_ARRAY_BUFFER, vertices, GL46.GL_STATIC_DRAW);
}
public void bindVAO(int VaoId){
GL46.glBindVertexArray(VAO[VaoId]);
}
Код: Выделить всё
//some shaderprogram0 starting and matrixes
bufferGen.bindVAO(VAO[0]);
GL46.glDrawArrays(GL_TRIANGLES, 0, 36);
//some shaderprogram1 starting and matrixes
bufferGen.bindVAO(VAO[1]);
GL46.glDrawArrays(GL_TRIANGLES, 0, 36);
первый указатель - шаг 5, однако, когда Я меняю указатели, поэтому сначала используется шаг 3, а второй - 5, оба рисуются хорошо. Я предполагаю, что оба шейдера используют один и тот же указатель, но я не понимаю, почему первый шаг указателя 3.
Что я пробовал:
- Изменение макета местоположение равно 1 в шейдере белого куба и указатель на индекс 1. Результат: белый куб не отображается.
- Отвязка VAO перед привязкой следующего VAO. Результат: ничего не меняется.
- Создание и привязка VAO в цикле инициализации. Результат: ничего не нарисовано, но нет ошибок
Код: Выделить всё
int[] VAO = new int[2];
int[] VBO = new int[2];
VAO[0] = GL46.glGenVertexArrays();
VAO[1] = GL46.glGenVertexArrays();
VBO[0] = GL46.glGenBuffers();
VBO[1] = GL46.glGenBuffers();
GL46.glBindVertexArray(VAO[0]);
GL46.glBindBuffer(GL46.GL_ARRAY_BUFFER, VBO[0]);
GL46.glBufferData(GL46.GL_ARRAY_BUFFER, vertices.verticesofCube, GL46.GL_STATIC_DRAW);
GL46.glVertexAttribPointer(0, 3, GL46.GL_FLOAT, false, 3 * Float.BYTES, 0);
GL46.glEnableVertexAttribArray(0);
GL46.glBindVertexArray(VAO[1]);
GL46.glBindBuffer(GL46.GL_ARRAY_BUFFER, VBO[1]);
GL46.glBufferData(GL46.GL_ARRAY_BUFFER, vertices.verticesofLight, GL46.GL_STATIC_DRAW);
GL46.glVertexAttribPointer(0, 3, GL46.GL_FLOAT, false, 3 * Float.BYTES, 0);
GL46.glEnableVertexAttribArray(0);
Подробнее здесь: https://stackoverflow.com/questions/792 ... e-pointers
Мобильная версия