2012-11-08 4 views
1

최근에 여러 컨텍스트에서 버텍스 배열 객체 및 프레임 버퍼 객체와의 공유 문제를 해결하는 방법에 대한 질문을 여러 차례 사용하면 두통이 더 심해질 것이라고 확신했습니다. 솔루션.여러 위젯에 대해 하나의 컨텍스트를 사용하는 Qt 및 OpenGL

나는 Qt를 사용하고 있으며, 현재 나의 셋업은 리소스를 공유하기 위해 내가 볼 수있는 QGLWidget의 생성자에서 사용하는 하나의 보이지 않는 QGLWidget을 가지고 있다는 것이고, 나는이 컨텍스트에서 특정 것들을 공유 할 수 없다는 것을 잘 받아 들인다.

단일 컨텍스트를 사용하여 다른 모든 위젯을 렌더링 할 수있는 솔루션을 찾고 싶습니다. this question은 공유하려는 QGLContext를 전달하는 QGLWidget 생성자를 사용하는 것을 말합니다. 그러나 이것은 아닙니다. 하나의 공통 컨텍스트를 사용하는 대신 하나의 QGLWidget에서 사용할 컨텍스트를 설정하고 두 번째 위젯에서이 컨텍스트를 사용하려고하면 qWarning이 호출되어 QGLContext가 전달할 위젯을 참조해야 함을 알립니다 .

내 응용 프로그램의 목표는 다른 장면을 렌더링하면서도 동일한 컨텍스트를 공유하는 2 개의 별도 GUI를 갖는 것입니다. 현재 저는 장면을 편집하여 게임 엔진에 사용할 파일에 저장하는 'World'편집기가 있습니다. 또한 UDK의 Material 편집기와 비슷한 자료를 그래픽으로 편집 할 수있는 'Material'편집기가 있습니다. OpenGL을 사용하는 미리보기 창입니다.

이상적으로는 편집기의 각 부분에 대해 별도의 프로그램을 보유하는 대신 탭으로 이동 가능한 하나의 통합 게임 편집기를 갖는 현재의 설계를 유지하고 싶습니다.

괜찮은 해결책 인 것처럼 보였던 유일한 점은 QGraphicsView를 사용하고 QGLWidget을 뷰포트로 설정하는 것이었지만, 전혀 작동하지 않는 것 같습니다. 나는 기본 프리미티브를 렌더링 할 수 있지만, 더 많은 것은 무너져 버린다.

이 OpenGL Widgets에 대한 경험이있는 사람이 있습니까? 그렇다면 목표 달성을 위해 취한 프로세스에 대해 설명해주십시오.

당신이 너무 많은 문제, 나는이 같은, 그래서 몇 가지 상황을 공유 할 CAD와 같은 응용 프로그램을 짓고 있어요 발생하는 이유는 아주 이해가 안
+0

QGraphicsView를 지속적으로 사용하고 있으며 실제로 잘 작동합니다. 그것의 문제점은 무엇입니까? –

+0

QGraphicsScene을 사용하여 QGraphicsView를 만든 다음 QGraphicsView 뷰포트를 파생 된 QGLWidget으로 설정합니다. 내 QGLWidget의 페인트 기능에서 기본 프리미티브를 렌더링하면 작동하지만 셰이더를 사용하여 무언가를 렌더링하려고하면 작동하지 않습니다. 내가 줄을 주석으로 처리하고 QGLWidget으로 QGraphicsView 위젯을 교체하면 모든 것이 잘 작동하고 그래픽보기와 함께 사용하는 것처럼 보입니다 – user1294021

+0

실제로 다른 QGLWidgets도 작동하지 않습니다. – user1294021

답변

1

는 :

  • 나는 응용 프로그램 전체 QGLWidget 숨겨진를 사용 내 메인 윈도우 클래스의 멤버로서 셰이더가로드 된 컨텍스트입니다.
  • 각 문서 윈도우에 대해 창 클래스는 숨겨진 QGLWidget 멤버를 가지며 컨텍스트 지오메트리가로드됩니다. 셰이더 컨텍스트는 다음과 같이 사용됩니다. 문서를 공유 할 수있는 '공유'위젯으로, 응용 프로그램 전체 쉐이더에 대한 문서 액세스를 허용합니다.
  • 각 문서 창의 5 개의 뷰포트 각각은 가시적 인 QGLWidget이며 실제 렌더링이 이루어지는 곳입니다. 문서 창 형상 QGLWidget이 '공유'위젯으로 사용되므로 뷰포트는 문서 전체의 형상 데이터와 응용 프로그램 전체의 셰이더에 액세스 할 수 있습니다.

공유 위젯 매개 변수는 모든 상황이 자신에 액세스 할 수있는 모든 그것의 조상 데이터 (하지만이 어린이 또는 형제 자매의), 당신이 컨텍스트의 '상속'트리를 만들 수 있습니다.

관련 문제