2009-10-29 23 views
9

Jakie dokładnie są moje opcje? Mam programy, które muszę napisać w OpenGL i DirectX, i chciałbym użyć Qt dla OpenGL, i nie muszę ponownie implementować połowy mojego programu dla komponentów DirectX mojego zadania.Używanie Qt z DirectX?

Sprawdziłem w Google i znalazłem odniesienia do osób narzekających na to, że Direct3D jest zależnością Qt, a ludzie mówią o implementowaniu podklasy QWidget QD3DWidget w sposób podobny do QGLWidget, ale nikt nie mówił o tym, jak wdrożyć to lub gdziekolwiek są przykłady.

Potrzebuję pomocy. Chcę wiedzieć, czy to możliwe? Co powinienem zrobić, aby działało? Czy to już było zrobione wcześniej?

Odpowiedz

15

jej całkiem proste, niż myślałem,

-> Create a QWidget 
-> Override paintEngine() method, does nothing, just returns NULL 
-> Assign HWND to widget->winId() 

    #ifdef USE_QTGUI 
     QApplication a(argc, argv); 
     CD3DWidget wndw; wndw.show(); wndw.resize(1280,960); 
     hWnd = wndw.winId(); 
    #else 
     hWnd = CreateAppWindow(name,300,300); 
    #endif 

     //CD3DWidget class contains only the following definitions 
    CD3DWidget::CD3DWidget(QWidget * parent):QWidget(parent){  } 
    QPaintEngine *CD3DWidget::paintEngine(){   return NULL;  } 

Dzięki

CV

+0

Czy to działa w najnowszej wersji QT? Obie pozostałe odpowiedzi mówią, że obsługa DirectX była eksperymentalna i została usunięta. –

+0

Witaj Tom, próbowałem tego i działa idealnie. Byłem w stanie uruchomić DirectX QWidget i QWidget OpenGL w tym samym QMainWindow. – blueskin

+0

@ Tom J Nowell: Nie potrzebujesz żadnego wsparcia ani integracji w zestawie narzędzi, aby użyć Direct3D samemu, wszystko czego potrzebujesz to natywny uchwyt okna i informowanie zestawu narzędzi, aby uniknąć wyczyszczenia tego okna. "Eksperymentalne usunięte wsparcie" jest tak daleko, jak rozumiem, jako przyspieszony rendering dla Qt, co jest zupełnie inną rzeczą. –

2

Lista zmian:

Qt 4.6 wprowadza wiele nowych funkcji i usprawnień, a także poprawki błędów ponad serii 4.5.x.

......................

  • doświadczalny silnika farby Direct3D została usunięta. Powodem, dla którego jest to, że Nokia skupia się na OpenGL dla sprzętu komputerowego przyspieszonego do renderowania .

......................