디스플레이 목록 데이터를 비디오 카드 메모리에 저장할 수 있습니까? DisplayList를 저장하기 위해 VBO (Video Buffer Object)와 같은 비디오 메모리 만 사용하려고합니다. 하지만 비디오 메모리 대신 항상 메인 메모리를 사용합니다. nVidia geForce 8600GTS 및 GTX260에서 테스트를 마쳤습니다.비디오 메모리를 사용하는 OpenGL 디스플레이 목록
답변
표시 목록은 매우 오래된 기능으로, OpenGL-1.0으로 거슬러 올라갑니다. 그들은 오래 전에 절망적이었습니다. 어쨌든 당신은 여전히 호환성을 위해 그것들을 사용할 수 있습니다.
OpenGL이 작동하는 방식으로 디스플레이 목록이 GPU 메모리에만 보관되는 것을 방지합니다. 그래픽 서버 (OpenGL이 호출하는 것처럼)은 완전히 추상적 인 것이며 사양에서는 디스플레이 목록에 넣은 것을 항상 사용할 수 있음을 보증합니다. 그러나 현대 GPU에는 제한된 양의 메모리 만 있으므로 페이로드 데이터는 필요할 때마다 스왑 아웃 될 수 있습니다.
효과적으로 GPU 메모리는 시스템 RAM의 데이터에 대해 캐시입니다 (시스템 RAM은 저장을 위해 캐시로 트래드되어야하는 것과 같은 방식입니다).
현대 GPU도 충돌 할 수 있으며 드라이버는 모든 것이 정상적으로 작동하는 느낌을 사용자에게 제공하는 완전 재설정을 수행합니다. 그러나 리셋 후에 GPU 메모리의 모든 데이터를 다시 초기화해야합니다.
따라서 OpenGL은 매끄러운 작동을 지원하기 위해 모든 페이로드 데이터의 복사본을 메모리에 보관해야합니다.
따라서 데이터가 시스템 RAM을 소모하는 것으로 표시되는 것은 정상입니다. 디스플레이 목록은 이고 GPU 메모리에으로 캐시되어있을 가능성이 높습니다.
표시 목록은 더 이상 사용되지 않습니다. 정점 인덱스가있는 VBO를 사용하여 그래픽 메모리를 사용하고 glDrawElements
으로 그릴 수 있습니다.
답장을 보내 주셔서 감사합니다. 비디오 카드 드라이버의 호환성 문제로 DisplayList를 사용하고 VBO를 사용하여 렌더링 속도를 가속화했습니다. –
"시도 할 때마다 항상 메인 메모리를 사용합니다. 어떻게 알 수 있습니까? 드라이버가 디스플레이 목록을 OpenGL에 넣는 위치를 감지 할 수있는 방법이 없습니다. –