Preciso obter de volta um float[]
de vértices que está armazenado em attrList no vbo em vao.
Eu faço:
float[] b = new float[vertexCount];
glBindVertexArray(vaoId);
long pointer;
glEnableVertexAttribArray(0);
pointer = glGetVertexAttribPointer(0, GL_VERTEX_ATTRIB_ARRAY_POINTER);
glBindBuffer(GL_ARRAY_BUFFER, (int) pointer);
glGetBufferSubData(GL_ARRAY_BUFFER, 0, b);
Todos os dados em vaos e vbos são armazenados corretamente, eu consigo desenhar coisas perfeitamente.
O problema aqui é que o ponteiro da variável retorna 0.
O que estou fazendo errado?
Não, seu código é um absurdo.
Da documentação de
glGetVertexAttribPointer
:Você deve passar
pointer
comooffset
parâmetro da suaglGetBufferSubData
chamada. Seu código trata isso como o nome do VBO que foi vinculado (porque você chamaglBindBuffer
); se quiser recuperar isso, pode perguntar usandoglGetVertexAttrib(0, GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING)
. O mesmo vale para o stride, divisor, etc.Mas tudo isso cheira a um grande problema XY: você deveria saber os valores que foram usados no momento da configuração, não?