2011-04-19 5 views
5
for (int i = 0; i < Number_Of_queries; i++) 
{ 
    glBeginQueryARB(GL_SAMPLES_PASSED_ARB, queries[i]); 

    Box[i] 

    glEndQueryARB(GL_SAMPLES_PASSED_ARB); 
} 

GPU GEMS 1에서 제안 된 방법이 특정 수의 쿼리가 수행되는 폐색 컬링에 대해 궁금합니다. 설명 된 방법을 사용하면 개별 상자를 서로 테스트 할 수 없으므로 다음 작업을 수행해야합니까?OPENGL ARB_occlusion_query 폐색 (occlusion) 컬링

테스트 박스 A -> 박스

테스트 박스 B 렌더 -> 박스 B

테스트 박스 C 렌더 -> 렌더링 박스 C

등등 ...

+0

새로운 기능이므로 수락 및 투표 기능에 대해 알려주십시오. –

답변

1

나는 당신을 정확하게 이해할지는 모르겠지만, 모든 상자를 먼저 렌더링하고 (깊이 버퍼에 쓰지 않고) 모든 객체를 검사하기 위해 쿼리 결과를 사용하는 순수한 구현의 결점 중 하나가 아닙니까? 그러나 단일 상자의 쿼리 결과를 즉시 사용하는 제안은 파이프 라인을 지연시키기 때문에 더 단순한 접근 방식입니다. 이 장 (29 장을 참조)을 더 읽으면 순진한 접근 방식의 단점을 극복 할 수있는 간단한 기술을 제시합니다. 즉, 모든 것을 정상적으로 렌더링하고 이전 프레임의 쿼리 결과를 사용합니다.

0

나는 (이 ... GPU의 보석 기사를 링크 좋은했을 것이다) 다음과 같은 확장에 설명 된대로 다소 비동기 쿼리에 대한 혼란 생각 :

http://developer.download.nvidia.com/opengl/specs/GL_NV_conditional_render.txt

내가 제대로이 기억하는 경우 차단없이 결과의 가용성을 확인하기위한 다른 확장 프로그램도있었습니다.

Christian Rau가 "쿼리를 수행하고 결과를 기다리며 결과를 기반으로 작업을 수행하십시오"라고 지적한 경우 "do stuff"에 얼마나 많은 작업이 있는지에 따라 결과가 지연 될 수 있습니다. 사실, 쿼리를 수행하고, 단일 무승부 콜을 저장하기 위해 왕복 여행을 기다리는 것은 거의 도움이되지 않습니다.