2013-07-01 12 views
5

Chciałbym renderować directcomposition do tekstury. czy to możliwe?Czy renderowanie DirectComposition do tekstury?

Powód tego jest taki, że Chciałbym móc renderować przyspieszoną gpu bezokienową przezroczystą kontrolkę flash player activex do tekstury. Coś, co zwykle nie jest możliwe, ale mam nadzieję osiągnąć to dzięki DirectComposition.

+0

[Z MSDN] (http://msdn.microsoft.com/en-us/library/windows/desktop/hh437351 (v = vs.85) .aspx) "DirectComposition nie rysuje bitmap, tylko manipuluje bitmapami które są już wyciągnięte. " Czy to powoduje problem? O ile mi wiadomo, komponuje się tylko bezpośrednio z HWND. –

+0

Czy mogę utworzyć HWND z SwapChain, a następnie użyć bufora ramki? – ronag

+0

Wszystko jest warte wypróbowania - ale fakt, że można tylko wytyczyć cel HWND, wydaje się sugerować, że jest on osadzony w systemie operacyjnym dość głęboko. Szczerze mówiąc, nie * wiem *, ale zdecydowanie * podejrzewam *, że rozwiązanie - jeśli to możliwe - będzie w najlepszym razie trochę hackerem. –

Odpowiedz

3

Jest mało prawdopodobne, że jest to możliwe, żeby zacytować MSDN (kopalnia nacisk)

DirectComposition nie oferuje żadnych usług rasteryzacji. Aplikacja musi używać innej biblioteki rasteryzacji opartej na oprogramowaniu lub sprzętowej akceleracji, takiej jak Direct2D lub Direct3D do wypełniania tworzonych bitmap. Po skomponowaniu DirectComposition przekazuje skomponowaną zawartość bitmapy do menedżera okien pulpitu (DWM) w celu wyświetlania na ekranie.

O ile wiem, istnieje tylko oficjalne API do Podziel się poza ekranem powierzchnie DWM, ale nie API pozwala uzyskać dostęp do odczytu-DWM powierzchni.

Co DWM robi pozwalają przekierowuje powierzchnie hwnd, więc może wyświetlić powierzchnie innych HWNDs na okna. Można to zrobić poprzez DirectComposition (przez CreateSurfaceFromHwnd) lub DWM API (via DwmRegisterThumbnail). Na przykład tego ostatniego look here.

Jeśli chcesz iść „hacking trasy” jak wskazano w komentarzu istnieją undocumented APIs które wyglądają jak mogą dać Ci dostęp do powierzchni DWM, w szczególności DwmpDxGetWindowSharedSurface brzmi obiecująco. Someone else dokonał już inżynierii wstecznej i znalazł podpis, ale nie mógł go uruchomić (tekstura działa, ale renderuje czerń). This guy wydaje się mieć więcej szczęścia i był w stanie renderować tekstury okien w 3d. Nie rozumiem jego języka, ale wydaje się, że musisz użyć DwmpDxUpdateWindowSharedSurface (również nieudokumentowane).

Należy jednak pamiętać, że korzystanie z nieudokumentowanych funkcji nie jest dobrym pomysłem, firma Microsoft może je zmienić w dowolnym momencie (nawet w wersjach Service Pack) lub całkowicie je usunąć, ponieważ są one używane wyłącznie przez samą firmę Microsoft, nie mają powodu do utrzymywania zgodność. Istnieje również duża szansa, że ​​użyjesz ich niewłaściwie (np. Możesz nie mieć koniecznej synchronizacji i spowodować losowe awarie lub, co gorsza).

Jednak od kiedy ta funkcja jest rzeczywiście dostępna, istnieje nadzieja, że ​​Microsoft może ją otworzyć w celu wykorzystania w niektórych przyszłych wersjach systemu Windows.

Powiązane problemy