일종의 일괄 처리 된 드로잉을 구현하기 위해 OpenGL
을 사용하고 있습니다. 이를 위해 데이터를 저장할 vertex buffer
을 만듭니다.OpenGL. glBufferData로 버텍스 버퍼 업데이트
참고 :이 버퍼는 일반적으로 각 프레임에서 업데이트되지만 크기는 줄이지 않지만 계속 증가 할 수 있습니다.
제 질문은 glBufferData
(s treaming write-only mode
)을 업데이트하는 것이 기술적으로 정확합니까 (예 : glMapBuffer
대신)? 전체 데이터가 업데이트되었으므로 매핑 할 필요가 없다고 생각하기 때문에 한 번에 전체 팩을 보내면됩니다. 현재 버퍼 크기가 작 으면 보내는 것보다 자동으로 증가합니다. 그렇지 않습니까? 이제는 실제로 작동하는 방식에 대해 확신합니다 (각 호출에서 버퍼를 다시 만들 수 있습니까?).
답장을 보내 주셔서 감사합니다. 하지만 이것은 약간 다른 점이었습니다. 최대 크기의 버퍼를 만드는 것은 불가능합니다. 그러나 크기를 변경할 확률은 매우 낮으므로 이제는 문제가됩니다. 드로잉 범위에 관해서 - 그게 내가 지금하는 일입니다. 하지만 귀하의 두 번째 옵션에 대한 질문을 할 수 있습니다 (verts의 범위 만 업데이트) :이 경우에는 항상 데이터를 연속 블록 (CPU)에 저장하므로 버퍼를 동일한 glBufferData로 업데이트 할 수 있습니다 , 더 작은 크기를 지정하면 - 동일한 결과가 나타 납니까? 버퍼를 망치거나 재현하지 않습니까? 고맙습니다. – Celestis
확실히 각 프레임 버퍼를 삭제하고 새 프레임을 생성하여 GPU/CPU 간의 성능을 향상시킬 수 있습니까? 사용중인 버퍼를 업데이트하지 않으면 GPU가 현재 사용하고있는 블로킹을 방지 할 수 있습니까? – Robinson
여기 흥미로운 링크가 있습니다 : http://hacksoflife.blogspot.com/2010/02/double-buffering-vbos.html, 도움이 될 수있는 glMapBufferRange 함수도 있습니다. – fen