2015-01-14 5 views
4

this 문서에 따르면, 원시 OpenGL을 QtQuick의 장면 그래프로 관리되는 UI로 렌더링하는 두 가지 주요 방법이 있습니다. 즉, (내 이해에 따라) :Qt에서 raw OpenGL을 QML UI로 렌더링하는 방법 비교

  • QtQuick에 의해 노출 된 일부 API를 통해 장면 그래프의 렌더링 루프에 연결되는 손으로 작성된 코드로 원시 OpenGL 메서드를 호출합니다.
  • 장면의 원시 OpenGL 부분을 장면 그래프의 구성 요소처럼 취급되고 텍스처 인 것처럼 렌더링되는 QQuickFramebufferObject로 렌더링합니다.

두 방법의 장점/단점은 무엇입니까?

답변

4

QQuickWindow::beforeRendering() 또는 QQuickWindow::afterRendering() 신호는 슬롯에서 렌더링 한 모든 OpenGL 그리기가 렌더링 된 Qt Quick 장면보다 적절하거나 적절하다는 신호입니다. 이것이 당신을 위해 충분하다면 - 즉. 사용자 정의 OpenGL 배경 또는 일부 종류의 오버레이를 그리기 만하면됩니다.

더 필요한 경우, 즉 OpenGL을 사용하여 씬 그래프 내에 배치 된 QtQuick Item을 렌더링 한 다음 두 번째 옵션을 사용해야합니다 : OpenGL을 일부 QtQuick Item의 텍스처로 사용되는 framebuffer 객체로 렌더링합니다. 상태에 링크 된 문서 자료로, 여러 렌더링 환경이나 여러 렌더링 스레드를 사용하여 더 많은 가능성을 제공 할뿐만 아니라 성능 비용도 발생합니다. 구현하기가 더 번거 롭습니다.

일반적으로 옵션 1)이 일반적으로 부적절하므로 2)를 반드시 따라야합니다. 내가 아는 QtQuick 장면 내에서 원시 OpenGL을 사용하는 유일한 방법입니다.

+0

성능 비용은 얼마나 비쌉니까? 내 응용 프로그램은 매우 동적 인 상호 작용 성과가 아닙니다. –

+0

어 ... 몰라. OpenGL 및 대상 장치로 렌더링하려는 항목의 개수, 크기 및 복잡성에 따라 다릅니다. 저의 경험에 따르면 QML 애플리케이션 비용은 대개 QML 구성 요소 인스턴스화 및 JS 실행에 의해 좌우됩니다. 렌더링 시간은 무시할 수 있습니다. 그러나 FBO를 사용하지 마십시오. 어떻게 그림을 바꾸는 지 말할 수 없습니다. FBO를 전환하는 것이 "싸다"는 말을 들었지만 믿을만한 정보는 아닙니다. FBO를 통해 텍스처에 렌더링 할 경우 성능에 미치는 영향은 Qt Quick와는 별개이므로 별도의 질문으로 질문 할 가치가 있습니다. –