OpenGL에서 VBO를 처리 할 때보다 지능적인 알고리즘을 찾고 있습니다.메모리 풀 알고리즘
필자는 현재 각 모델을 4MB VBO에 저장합니다. 모델이 4MB보다 큰 경우 별도로 저장됩니다. 개체가 함께 저장되어 바인딩 수가 줄어 듭니다.
내가 겪고있는 문제는 사용되지 않는 VBO 만 정리하는 방법이었습니다. 이러한 메모리 풀을보다 잘 관리 할 수있는 방법에 대한 자료는 감사하겠습니다.
OpenGL에서 VBO를 처리 할 때보다 지능적인 알고리즘을 찾고 있습니다.메모리 풀 알고리즘
필자는 현재 각 모델을 4MB VBO에 저장합니다. 모델이 4MB보다 큰 경우 별도로 저장됩니다. 개체가 함께 저장되어 바인딩 수가 줄어 듭니다.
내가 겪고있는 문제는 사용되지 않는 VBO 만 정리하는 방법이었습니다. 이러한 메모리 풀을보다 잘 관리 할 수있는 방법에 대한 자료는 감사하겠습니다.
VBO는 일반 메모리와 달리 정교한 "메모리 관리"가 필요하지 않습니다. 각기 다른 메쉬에 적절한 크기의 VBO를 할당하고 함께 처리하십시오. 운전사보다 현명하지 못한 시도는 열등한 성능을 초래할 것입니다.
또한 가능한 한 큰 VBO를 만들려고 할 때 이점이 없습니다. 사실 내 경험상 약 0.5k ~ 5k 버텍스의 적당한 크기의 VBO가 가장 효과적입니다.
나는 원래 당신과 비슷한 것을 가지고있었습니다. 자유롭게 VBO 세그먼트를 재사용 할 수 있도록 약 100 줄의 코드에서 간단한 프리리스트를 구현했습니다. 그것은 나에게 프레임 치기를주는 VBO 재배치를 상당히 감소시켰다. 같은 수의 정점과면을 가지고있는 많은 메시가 있기 때문에 할당에 가장 적합한 알고리즘을 사용했습니다.
솔루션을 확장 할 수 있습니까? – dcousens
필자는 이미 필요한 크기의 VBO를 생성 및 파괴하고 드라이버가 메모리 관리를 처리하도록 시도했다고 가정합니다. (NB : 4MB! = 4096000 bytes) –
@daniel : VBO가 단일 프레임에서 살아남을 것을 제안하는 것은 아니며, 각 모델은 VBO를 함께 포장하는 것이 좋습니다. 그렇다면이 "가장 사용되지 않는"VBO는 없을 것입니다. 어쨌든 어떤 응용 프로그램입니까? 모델이 자주 언로드됩니까? –
위의 시스템을 사용할 때 발생할 수있는 결함 일뿐입니다. 개별 VBO를 거부하는 이유는 정적 데이터에 대한 바인딩이 적기 때문입니다. 왜 4MB인지, ATI/Nvidia 권장 VBO 크기입니다. 응용 프로그램은 반드시 언로드를 자주 수행하지는 않지만 문제가 될 수있는 것으로 나타났습니다. – dcousens