나는 버텍스 속성 배열 GLfloat *vxData
을 가지고 있습니다. GL_ARRAY_BUFFER
과 GL_ELEMENT_ARRAY_BUFFER
을 모두 vxData
과 올바른 인덱스 데이터로 바인딩 했으므로 초기 정점이 성공적으로 렌더링됩니다. 각에서 OpenGL ES 2.0 : 새로운 버텍스 데이터 크기로 glBufferData 사용
glBindBuffer(GL_ARRAY_BUFFER, buffers[0]);
glBufferData(GL_ARRAY_BUFFER, vxDataSize, vxData, GL_STATIC_DRAW);
glDrawElements(...)
, vxData
변경 크기 이하/더 정점을 수용하기를, 인덱스 데이터는이를 반영하여 재 작성하고, vxDataSize
가 업데이트됩니다. 이 데이터 변경 직후 렌더링의 경우 위의 동일한 행을 호출하는 것이 맞습니까?
다른 가능성을 알고 있습니다. 예 : glMapBufferOES
을 사용하여 위의 내용이이 시나리오에서 기술적으로 올바른지 알고 싶습니다.
Nicol.이 통찰력에 대해 감사드립니다. 두 번째 제안을 성취하기 위해 아마도 vxDataSize를 상한선으로 수정하고 존재하는 정점에 대한 인덱스 데이터를 제공하면됩니까? vxData가 RAM에 저장되어 있고 가능한 한 작아야한다는 점을 감안하면 어떻게 접근해야합니까? – KomodoDave
명확히하기 위해 : GPU 외부에'vxData'를 저장하고 계산하기에 값이 비싼 값이 있기 때문에 각 렌더링시 다시 제출하십시오. RAM에 저장하면 처음부터 다시 계산하지 않고 델타로 특정 값을 조정할 수 있습니다. – KomodoDave
'vxDataSize'를 동적으로 만들면, 한 프레임을 더 크게 만들고 다음 프레임을 작게 만드는 것이 RAM에서도 메모리를 절약 할 수 있다고 생각합니까? 주소 공간을 조각 내고 있습니다. 고정 크기로 만들었다면 절대로 움직이거나 크기가 조정되지 않는 메모리 덩어리를 얻을 수 있습니다. 크기가 가변적 인 경우 크기를 늘리거나 줄이면 다시 할당해야합니다. 그러면 주소 공간을 옮겨서 조각화 할 수 있습니다. 이것은 좋지 않다. –