2014-02-11 22 views
6

QtQuick 2.0 장면을 Direct3D 장면과 함께 사용하기위한 솔루션을 만들기 위해 오랫동안 노력해 왔지만 그다지 성공적이지 않았습니다. 필자의 목표는 합리적인 속도 (60 FPS?)로 Direct3D 엔진을 QML UI와 함께 실행시키는 것입니다. 두 가지 모두 150-200 FPS로 잘 작동합니다. 그러나 한 창 안에서 서로 협력하도록 강요 당하면 모든 것이 바나나로 바뀝니다. 나는 몇 가지 방법을 조사했지만, 그들 중 누구도 충분 할 것 같다 :Direct3D 장면 상단의 QtQuick 2.0 장면

솔루션 A가 : QQuickPaintedItem QImage &과 시각화, 텍스처로 Direct3D의 장면을 렌더링

  • 이 솔루션은 매우 잘 작동 그것과 웹상의 다른 사람들에 따르면 선호되는 것으로 보인다. 그러나 그것은 천천히 천천히 진행됩니다. 풀 HD로 18-20 FPS 이상을 가질 수 없었습니다. 병목 현상은 분명히 텍스처 전송 체인에서 GPU (D3D)에서 CPU (QImage)로, 그리고 다시 GPU (QML 렌더러)에서 각 프레임으로 바뀌 었습니다. 특히 QML 측에서 CPU-> GPU 처리가 너무 느리다!

솔루션 B : 다음이 기본적으로 라운드 이전 솔루션 다른 방법 Direct3D를 텍스처

  • 를 사용하여 FBO에 QtQuick 장면을 렌더링. UI가 업데이트를 필요로하지 않을 때 속도는 약간 더 좋습니다. 애니메이션이 시작되면 모든 것이 18-20 FPS로 다시 떨어집니다. QOpenGLFramebufferObject :: toImage()는 분명히 시간이 걸립니다. 스톨을 줄이기 위해 양면에 텍스처/FBO 이중 버퍼링을 구현하는 것은 실제로 도움이되지 않습니다.

솔루션 C : Direct3D를 현장

  • 와는 QWidget의 상단에 사용할 수 투명성 QQuickView 중 하나를이 방법 운이 아니었다. QQuickView가 자체 창에있을 때만 투명성이 작동하는 것처럼 보입니다. 같은 윈도우 내에서 D3D QWidget 위에 놓으면 즉시 작동을 멈추고 완전히 불투명하게되었습니다. 누군가가 비슷한 것을 시도하고있었습니다. http://qt-project.org/forums/viewthread/5484,하지만 그 해결책은 전혀 없었습니다. 어쩌면 두 개의 완전히 분리 된 창 (메인 D3D 창 + 프레임없는 투명한 QML 창)을 계속 유지하면서 트릭을 수행 할 수도 있지만 어리석은 것처럼 들릴 수 있습니다.

솔루션 X : ANGLE 라이브러리를 수정하고 내 Direct3D를 렌더러

  • 와 & 주 D3D 디바이스 컨텍스트를 추출하는 시도는 가능한 한 모든 라이브러리 수정을 피하고, 아직 시도하지 않은. 그것은 심지어 합리적인 선택일까요?

내 명백한 질문은 다음과 같습니다. 제가 잘못하고 있습니까? 선호되는 솔루션은 무엇입니까? A, B, C, X 또는 완전히 다른 무엇인가? 누군가 올바른 방향으로 나를 가리킬 수 있습니까?

TL :Direct3D 장면 위에 QML 장면을 렌더링하는 가장 빠른 방법은 무엇입니까?

+1

솔루션 X가 올바른 장기적인 솔루션 인 것으로 보입니다. 솔루션 C가 얼마나 잘 작동하는지 확인하고 A, B, C 중에서 가장 우수한 성능을 선택해야합니다. Digia 또는 계약자가 합당한 금액을 지불하기 위해 계약을 체결 할 수 있다고 확신합니다. 직접 할 시간이 없다면. –

답변

1

당신은 Solution X의 잡동사니 믹스와 DirectX QPA 플러그인 작성을 원합니다.

http://qt-project.org/wiki/Qt-Platform-Abstraction

나는 당신이 그런 노력을 오픈 소스 화하는 경우가 많은 친구를 만들어 주겠다고 내기 것!