모든 튜토리얼에서 VAO (Vertex Array Objects)에 대해 찾을 수 있으며 정점 속성을 구성하고 VBO (Vertex Buffer Object)를 바인딩하여 VAO를 사용하는 방법을 보여줍니다. 그러나 각 버퍼가 동일한 데이터 패턴 (정점, uv, 색상 등)을 사용하는 고정 셰이더와 함께 VBO 세트에 대해 구성되는 VAO를 만들고 싶습니다. 그래서 하나의 쉐이더를 사용하여 그릴 여러 VBO에 대해 하나의 VAO를 만들고 싶습니다.
나는 이것에 대한 데모를 찾을 수 없었기 때문에 시도해보기로 결정했다. 그러나 glDrawArray
통화 가 작동하지 않고 충돌합니다 . VBO가 바인딩되지 않은 것 같습니다. 사용중인 코드는 다음과 같습니다.
표현:
/* Prepare vertex attributes */
glBindVertexArrayOES(vao);
/* Upload the buffer to the GPU */
glBindBuffer(GL_ARRAY_BUFFER, pool->next());
glBufferSubData(GL_ARRAY_BUFFER, 0, parts * buffer.stride() * 6, buffer.getBuffer());
/* Draw the triangles */
glDrawArrays(GL_TRIANGLES, 0, parts * 6);
glBindVertexArrayOES(0);
VAO 생성 :
glBindVertexArrayOES(vao);
glEnableVertexAttribArray(ls.position);
glVertexAttribPointer(ls.position, 2, GL_FLOAT, GL_FALSE, buffer.stride(), 0);
glEnableVertexAttribArray(ls.color);
glVertexAttribPointer(ls.color, 3, GL_FLOAT, GL_FALSE, buffer.stride(), GL_BUFFER_OFFSET(buffer.dataTypeSize * 2));
glBindVertexArrayOES(0);
속성 위치를 보유한 ls
단순 struct
위치 는 어디입니까 ?
렌더링 부분에서 glBindBuffer
와 glBindVertexArrayOES
주변을 바꾸는 것도 효과가 없었습니다.
따라서 문제는 : 그렇게 할 수 있습니까? 아니면 각 버퍼에 대해 VAO를 만들어야합니까? 각 VBO에 대해 VAO를 만들어야하는 경우 VAO glBufferSubData
와 함께 사용하여 VBO의 데이터를 업데이트 할 수 있습니까?