2009-09-04 6 views
12

렌더링을 위해 현재 GL 컨텍스트가 창과 연결되어 있습니다. 응용 프로그램이 여러 장면 (예 : 누적 또는 다른 뷰포트 사용)을 렌더링하는 경우 동일한 컨텍스트를 다시 사용할 수 있다고 생각합니다.여러 OpenGL 컨텍스트를 사용하는 이유

제 질문은 왜 여러 GL 문맥을 사용해야합니까? 나는 ARB_framebuffer_object 확장 사양에서 MakeCurrent에 대한 호출이 비싸고 ARB_framebuffer_object 확장이있는 경우 MakeCurrent를 사용하지 않고 제네릭 버퍼에서 렌더링 할 수 있다고 읽었습니다.

여러 GL 컨텍스트를 사용하는 유일한 이유는 컨텍스트 상태 (픽셀 저장, 전송, 포인트 크기, 다각형 스틱 등)를 설정하거나 다중 렌더링 버퍼를 사용할 수 없도록 설정하는 것입니다. 없이). 컨텍스트 상태를 설정하는 대신 대체 컨텍스트를 사용하는 것이 더 좋은 시점을 어떻게 결정해야합니까?

답변

11

나는 일반적으로 여러 GUI 창으로 렌더링하는 것과 같이 반드시해야하는 경우에만 추가 컨텍스트를 사용하는 경향이 있습니다. 그 밖의 모든 것에 대해서는 프레임 버퍼 객체 나 상태 변경을 사용합니다.

그러나 이와 같은 성능 권장 사항은 모든 경우에 적용되지는 않습니다. 확실하지 않은 경우 자체 하드웨어에서 자신의 응용 프로그램을 측정해야합니다. gDEBugger 도움을 받으실 수 있습니다. 평가판이 준비되어 있습니다.

2

GUI 프로그램에서 여러 개의 OpenGL보기를 가질 수 있습니다. 그 중 일부는 GUI와 동일한 스레드에서 실행되고 다른 일부는 자체 스레드에서 실행됩니다. OpenScreen을 offscreen 모드로 실행할 수 있습니다. 스레드 당 최소한 하나의 컨텍스트

스레드 당 더 많은 컨텍스트가있는 것이 맞는지 확실하지 않습니다.

4

여러 GPU의 주소를 지정하려면 GPU별로 하나 이상의 드로어 블이 있어야하며 GPU 관련 컨텍스트가 있어야하므로 여러 컨텍스트를 사용해야합니다.

6

IIRC를 사용하면 텍스처와 버퍼 객체 같은 객체를 컨텍스트간에 공유 할 수 있으므로 기술적으로 두 번째 스레드에서 두 번째 컨텍스트를 만들고 비동기 적으로 첫 번째 스레드가 렌더링을 수행하는지 여부를 걱정하지 않고 텍스처를로드 할 수 있습니다.

관련 문제