OSD widoczne w każdej aplikacji(również DirectX i OpenGL)

0

Szukałem czegoś takiego ale do tej pory nie znalazłem odpowiedzi, potrzebuję, aby moja aplikacja potrafiła wyświetlać swoje OSD również w grach, przy czym żeby nie było żadnego migania ani innych artefaktów. Znalazłem kilka przykładów na robienie OSD jednak żaden nie spełniał takich warunków.
Jedyna znana mi aplikacja która wykonuje to prawidłowo to FRAPS (pokazując FPS w aplikacjach DirectX, OpenGL oraz DirectShow). Proszę o pomoc.

Obecnie moja koncepcja sprowadziła się do użycia TextOut, wszystko działa, tyle że tekst trzeba odświeżać, jakbym wiedział kiedy aplikacja skończyła rysować to nie byłoby z tym problemu, a tak posiadam migające OSD;
Niestety z tego co szukałem przy rysowaniu czy zmianie stron nie są wysyłane żadne WM :/ Może ktoś zna sposób jak znaleźć moment kiedy aplikacja właśnie skończyła rysować? Ewentualnie inne pomysły jak to zrealizować.

0

Fraps pod każdy z typów użycia overlay'a (bo przecież i D3D, i DXShow, i ostatecznie OpenGL z tego korzystają) ma osobną implementację wyświetlania - nie ma jednego uniwersalnego sposobu. W dodatku synchronizacja z D3D jest podobno (nie próbowałem - tylko czytałem) dosyć trudna, bo wymaga przechwytywania wywołań między programem a bibliotekami DX (a w przypadku DirectX Managed jeszcze inna).

0

To, że to nie jest łatwe zadanie to już się naczytałem w sieci, może jednak mimo wszystko gdzieś jest wyjaśnione jak to można zrobić? Jeżeli tak to prosiłbym o takie linki. Chciałbym się z tym pomęczyć ale bez punktu odniesienia jak się dobrać do komunikacji aplikacji z DirectX/OpenGL raczej więcej nie zdziałam niż mam obecnie.

0

a cos takiego jak Application.OnIdle:=twoja procedura z wyrzucaniem bufora na ekran??
np Application.OnIdle:=Idle;
a w idle masz SwapBuffer

0

Niestety nie rozumiem o co Ci chodzi, mógłbyś jakoś jaśniej? Cokolwiek bym zrobił w swojej aplikacji i tak zostanie zamazane przez np. OpenGL, próbowałem nawet użyć wrappera, dzięki któremu niby mogłem wstawić rysowanie mojego OSD po SwapBuffors lub przed. Niestety nadal miga :/
Oto link do wrappera (Visual C++) http://www.megaupload.com/?d=OZXKF8WT
Podstawiłem TextOut w procedurze SwapBuffors, wrzuciłem zbuildowany OpenGL32.dll do katalogu z programem i tekst miga, ktoś wie co źle robię ??</url>

0

a przypadeczkiem nie ustawiałes sobie doublebuffered??
na czym wyswietlasz okno opengl??
na panelu?? Dales uchwyty do okna opengl na ten panel?

0

@crowa - Karak'owi chodzi o wyświetlanie czegoś na oknie innych aplikacji (w tym akcelerowanych - tak jak Fraps), a nie we własnym programie.

0

Nie pamiętam dokładnie, ale to chyba kwestia pobrania odpowiedniego uchwytu w WinAPI.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0