2011-09-10 6 views
2

OpenGL이 실제로 내가 지시하는 것을 그릴 때는 언제입니까? 특정 드로잉 함수 또는 버퍼 스왑 호출시입니까?
은 내가 이런 식으로 뭔가를 할 수 있다면이보고 알고 싶어OpenGL 그리기 시간

SomeTimer Timer; 

Timer.Start(); 
glDrawArrays(...); 
long time = Timer.Stop(); 

그리기가 가장 많은 시간이 걸리는 보려면 그 기반으로 최적화 할 수 있습니다.
중요한 점은 2d, 스텐실/깊이 또는 다른 버퍼 테스트가없는 경우에만 그리기입니다.

답변

2

코드가 작동하지 않습니다. OpenGL 커맨드는 정의상 비동기로 간주됩니다. GL 명령은 완료되기 전에 매개 변수에 완전히 쓰거나 읽어야합니다. 그러나 그 외에는 모든 배팅이 해제됩니다.

타이밍 임의의 호출 glDraw* 호출은 해당 함수 호출이 완료되는 데 걸리는 시간 만 알려줍니다. 렌더링이 완료되는 데 걸리는 시간에 대해서는 아무 것도 말하지 않습니다.

more thorough discussion of this subject is available.

시간은 렌더링 할 수 있지만 OpenGL 방식으로해야합니다. ARB_timer_query을 사용하면 OpenGL 명령을 으로 완료하는 데 걸리는 시간을으로 지정하는 것만이 OpenGL에 제공되지 않습니다. 이 확장은 OpenGL 3.3의 핵심이며 다양한 하드웨어 레벨에서 꽤 광범위하게 사용할 수 있습니다. 거의 모든 GPU가 여전히 소유자의 지원을 받고 있습니다.

관련 문제