내가 기본적으로해야 할 시도하고의 인스턴스를 생성하는 것입니다 QGLWidget
(또는 오히려 QGLWidget
의 파생 클래스)하는 QMainWindow
에 추가 한 다음 QGLWidget
의 렌더링 컨텍스트에 액세스 내 QTCreator 프로그램의 어느 곳에서나 naked OpenGL을 호출 할 수있게되었습니다.은 전체 응용 프로그램에서 QGLWidget에 액세스하려고
1) QGLWidget
라는 OGLWidget
의 서브 클래스를 생성 및 싱글로 그 제작, 다음 싱글 클래스 "OGLWidget"를 서브 클래 싱을 시도 : 나는 시도
것. 나는 이것이 OGLWidget 싱글 톤이 사용하는 것과 동일한 렌더링 컨텍스트에 대한 액세스를 제공 할 것이라고 생각했지만 작동하지 않았다.
2) 생성자 QGLWidget(QWidget * parent, QGLWidget * shared, Qt::WindowFlags)
을 사용하십시오. 이 중 하나에 대해 QGLWidget에 싱글 톤 객체를 캐스팅 한 다음 QGLWidget을 "Display"라는 다른 클래스에서 서브 클래스로 만들 때이 생성자에 고정 시켰습니다. 각 클래스 openGl 호출하기 전에 makeCurrent 호출했지만 원래 싱글 톤 그릴 것이라고 시도했다. 나는 또한 isSharing을 확인했고 그것은 사실로 돌아갔다.
. 나는 signals \ slots가 Qt를 사용할 때 거의 필수적이지만 수신 객체가 전역 상태 (이 경우 OpenGl)에 종속적이지 않을 때만 사용한다는 것에 동의합니다. – pauluss86
맞아, 니가 무슨 뜻인지 알지만, 나는 그다지 동의하지 않는다. 프로그램이 얼마나 복잡 하느냐에 달려 있다고 생각하지만이 방법은 항상 비교적 작은 규모의 응용 프로그램에서 완벽하게 작동합니다. 덧붙여 말하자면, 대부분의 Qt 예제 프로젝트의 접근법과 꽤 비슷합니다. – Yellow
작은 응용 프로그램의 경우 잘 작동 할 것입니다. 이것은 또한 내 경험입니다. 현재 안드로이드 게임에서 일하고 있으며 모든 OpenGl 코드를 단일 클래스로 옮긴 후 다시 태어났습니다.엄격한 렌더링 순서가 필요하다는 점을 알아야하며, 렌더링 매개 변수가 다른 많은 개체가 있으며 상태 변경을 쉽게 최소화 할 수있는 방법이 필요했습니다. 그래서 나는 내 대답에 설명 된 방법에 정착했다. 그러나 이것은 대부분 맛이 \ 의견 예, 거기에 내가이 경로를 취하게 만든 성능 문제가 없었다. – pauluss86