2011-05-08 2 views
3

OpenGL에서 VBO를 처리 할 때보다 지능적인 알고리즘을 찾고 있습니다.메모리 풀 알고리즘

필자는 현재 각 모델을 4MB VBO에 저장합니다. 모델이 4MB보다 큰 경우 별도로 저장됩니다. 개체가 함께 저장되어 바인딩 수가 줄어 듭니다.

내가 겪고있는 문제는 사용되지 않는 VBO 만 정리하는 방법이었습니다. 이러한 메모리 풀을보다 잘 관리 할 수있는 방법에 대한 자료는 감사하겠습니다.

+1

필자는 이미 필요한 크기의 VBO를 생성 및 파괴하고 드라이버가 메모리 관리를 처리하도록 시도했다고 가정합니다. (NB : 4MB! = 4096000 bytes) –

+0

@daniel : VBO가 단일 프레임에서 살아남을 것을 제안하는 것은 아니며, 각 모델은 VBO를 함께 포장하는 것이 좋습니다. 그렇다면이 "가장 사용되지 않는"VBO는 없을 것입니다. 어쨌든 어떤 응용 프로그램입니까? 모델이 자주 언로드됩니까? –

+0

위의 시스템을 사용할 때 발생할 수있는 결함 일뿐입니다. 개별 VBO를 거부하는 이유는 정적 데이터에 대한 바인딩이 적기 때문입니다. 왜 4MB인지, ATI/Nvidia 권장 VBO 크기입니다. 응용 프로그램은 반드시 언로드를 자주 수행하지는 않지만 문제가 될 수있는 것으로 나타났습니다. – dcousens

답변

1

VBO는 일반 메모리와 달리 정교한 "메모리 관리"가 필요하지 않습니다. 각기 다른 메쉬에 적절한 크기의 VBO를 할당하고 함께 처리하십시오. 운전사보다 현명하지 못한 시도는 열등한 성능을 초래할 것입니다.

또한 가능한 한 큰 VBO를 만들려고 할 때 이점이 없습니다. 사실 내 경험상 약 0.5k ~ 5k 버텍스의 적당한 크기의 VBO가 가장 효과적입니다.

+0

크기에 따라 어떤 의미가 있습니까? – dcousens

+0

베팅은 "모델 크기"에 대한 오타입니다! :) –

+0

사실 나는 "겸손한"('t'에주의하십시오)라고 쓰려고했습니다. – datenwolf

1

나는 원래 당신과 비슷한 것을 가지고있었습니다. 자유롭게 VBO 세그먼트를 재사용 할 수 있도록 약 100 줄의 코드에서 간단한 프리리스트를 구현했습니다. 그것은 나에게 프레임 치기를주는 VBO 재배치를 상당히 감소시켰다. 같은 수의 정점과면을 가지고있는 많은 메시가 있기 때문에 할당에 가장 적합한 알고리즘을 사용했습니다.

+0

솔루션을 확장 할 수 있습니까? – dcousens