2011-12-13 3 views
3

초당 여러 번 업데이트되고 OpenGL을 사용하여 그려지는 여러 (16-32) 줄거리로 구성된 응용 프로그램을 작성하고 있습니다. 지금까지 GLUT를 사용하여 플롯의 프로토 타입 제작을 대부분 중단했습니다. 그러나 QT와 같은 완전한 프레임 워크 프레임 워크를 채택하고 싶습니다. 테스트 QGLWidget을 작성할 준비가되었습니다.C++에서 단일 OpenGL 컨텍스트가있는 다중 QGLWidgets

시작하기 전에 여러 개의 QGLWidgets가 단일 OpenGL 컨텍스트를 공유 할 수 있는지 알아 보려합니다. 그렇다면 위젯간에 OpenGL 컨텍스트를 공유 할 때 추적해야 할 세부 사항이 있습니까?

답변

1

예, this constructor을 사용하여 OpenGL 컨텍스트를 공유 할 수 있습니다.

위젯간에 OpenGL 컨텍스트를 공유 할 때 알아야 할 것이 있습니까?

잘 모르겠지만 특별한 조치가 필요하다고 생각하지 않습니다.

3

여러 개의 QGLWidgets가 단일 OpenGL 컨텍스트를 공유 할 수 있다면 가능합니까? X11은 /는 여러 드로어 블에 간접적 컨텍스트를 사용하는 것이 실제로 가능하다 GLX에, 그러나 문맥에서만 활성화 될 수 있습니다 : 그것은 문제의 플랫폼에 의존하기 때문에

지금이 일반적으로 대답 할 수 없습니다 한 번에 한 드로어 블입니다. 그러나

: 그것은 가능하다 (그리고이 작업을 수행하기 위해 권장되는 방법입니다) 여러 컨텍스트가 데이터를 공유하도록

. 오픈 GL의 첫 번째 버전에서는 이것이 디스플레이 목록 이었기 때문에 여전히 목록 공유라고 불립니다. 그러나 OpenGL의 최신 버전에는 텍스처, 픽셀 버퍼 객체 및 버텍스 버퍼 객체도 포함됩니다. 그러나 프레임 버퍼 객체는 공유 할 수 없지만 텍스처는 FBO 첨부 파일로 사용할 수 있으므로 큰 문제는 아닙니다.

QGLWidget은 QGLWidgests의 컨텍스트간에 컨텍스트 데이터를 공유 할 수있는 강력한 API를 제공합니다.

+0

개별 플롯은 매우 간단합니다. 그것들은 분산 형 플롯의 집합이며 공유 할 필요가있는 데이터는 없습니다 (PBO, VBO, FBO). 많은 양의 리소스가 각 OpenGL 컨텍스트에 할당되고 컨텍스트간에 전환하는 데 비용이 많이 듭니다. 이 경우 모든 위젯간에 공유되는 단일 컨텍스트를 갖는 것이 바람직합니까? – slayton

+0

@slayton : 컨텍스트 전환에 드는 비용은 리소스가 변경된 것입니다. 하나의 리소스가 항상 변경됩니다 : 창. 그러나 컨텍스트의 데이터가 공유되면 상황이 그렇게 나쁘지 않습니다. 또한 애니메이션에서 이미지가 생성되는 실시간 렌더링 응용 프로그램에서는 컨텍스트 전환에 드는 비용이 더 많이 필요하다는 점도 이해해야합니다. 귀하의 경우에 당신은 다소 단순한 플롯을 가지고 있으며 아마도 교환 할 텍스처가 없을 것입니다. – datenwolf

+0

개별 QGLWidgets가 모두 동일한 창에 포함되어 있으면 각 컨텍스트 전환과 함께 해당 리소스가 변경됩니까? OpenGL은 os에 의해 그려지는 윈도우와 다른 윈도우 리소스를 가지고 있습니까? 또는 각 컨텍스트에 동일한 리소스에 대한 링크가 있습니까? – slayton