Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Direct3D/OGL hooken bzw. Fraps-Nachbau - wie? (https://www.delphipraxis.net/44840-direct3d-ogl-hooken-bzw-fraps-nachbau-wie.html)

dizzy 25. Apr 2005 16:52


Direct3D/OGL hooken bzw. Fraps-Nachbau - wie?
 
Mahlzeit miteinander.

Das eine oder andere Mal kamen hier schon Fragen auf, wie man sowohl lesend, als auch schreibend Zugriff auf laufende Direct3D/OGL-Screens bekommt. Mich selbst kitzelt es ja nun auch schon länger, dieses mal zu versuchen. Dass das nicht ganz ohne ist weiss ich (habs ja auch schon öfter mal geschrieben ;)).
Tja, und nun ist die Zeit gekommen: Ich bin heiss :D

Ich habe mich mal ein wenig auf die Suche gemacht um zu erfahren wie man das ganze angehen könnte, wobei ich meinen Schwerpunkt zunächst auf DirectX legen werde, da man es auf Win-Plattformen doch etwas häufiger (bei Games o.ä.) antrifft.

Folgendes habe ich herausbekommen:
  • API-Hooking ist das generelle Zauberwort
    • Die MadCodeHook ist dabei mein aller bester Freund
  • Es wären die Funktionen zu hooken, die den Backbuffer flippen
  • Ich brauche wohl den DC
  • Alles ist relativ Neuland für mich ;)
Wie man grundsätzlich mit MadCodeHook einen globalen Hook erstellt, und selbigen auch injizieren kann, ist ja auf den Seiten von Madshi recht gut dokumentiert, und in der DP finden sich auch ein paar wenige Schnipsel. Das sollte an Rahmen denke ich genügen.

Mein eigentliches Problem fängt dort an, wo es wirklich spannend wird:
Welche Funktionen aus welchen DLLs und vor allem mit welchen Parametern sind meine Ziele? Was bekomme ich dort dann heraus?


Zielsetzung ist ein Tool dass dem Screenshot/Screenvideo-Tool Fraps ähneln soll. Ich brauche also nur Zugriff auf den Front- oder Backbuffer, so dass ich ein Bitmap befüllen kann. Sekundäres Ziel wäre eine Ausgabe in das Direct3D-Programm, so dass man z.B. Auskunft über diverse Dinge geben kann, wie restlicher Plattenplatz, Framerate (evtl.), ob Aufnahme aktiv oder nicht, etc.pp.
(Eventuell ließe sich ja sogar ein kleiner MP3-Player als Feature einbauen der direkt aus dem Spiel heraus bedient werden kann :D *träum*)


Bei meinen Suchen bin ich auf dieses Projekt gestoßen, und habe mir auch mal sie Sourcen angesehen, in der Hoffnung dort Anregung zu erhalten. Da meine C-Festigkeit leider gegen NULL (;)) geht verstehe ich den Code faktisch garnicht. Ich habe nichtmal herausgefunden welche Funktionen welcher DLLs gehookt werden :oops:


Ich bin über wirklich jede Form von Hilfe dankbar, da sich zu dem Thema nicht allzuviel verständliches Material finden lässt.

Gruss,
Fabian

brechi 25. Apr 2005 17:51

Re: Direct3D/OGL hooken bzw. Fraps-Nachbau - wie?
 
beie opengl könnte ich dir das in ein paar minuten machen.

bei DirectX werden die einzelnen funktionen nicht exportiert, sondern man bekommt bei der erstellung nur einen pointer auf das "directX" projekt zurück, da habe ich leider icht so viel ahnung von

aber unter opengl ist das alles recht einfach, man muss nur wglSwapBuffers hooken dnan kann man die framerate berechnen

dizzy 25. Apr 2005 17:56

Re: Direct3D/OGL hooken bzw. Fraps-Nachbau - wie?
 
Erhält man bei der OGL-Lösung auch Zugriff auf die Pixeldaten? Dann wäre das ja schon mal ein kleiner Anfang :)

Wenn du zu dem Problem mit DX Links o.ä. hättest... ich lese alles, und das mit Wonne :)

Danke schonmal!

brechi 25. Apr 2005 18:05

Re: Direct3D/OGL hooken bzw. Fraps-Nachbau - wie?
 
wglSwapBuffers bei jedem frame aufgerufen
Pixeldaten bekommt man da nicht kann man aber über glReadPixels jederzeit auslesen

ne eiegen Dll injection + Hook unit hätte ich auch da, eigentlich ist das ein kinderspiel in opengl da ich das schon seit mehr als 2 jahren mache

brechi 25. Apr 2005 19:39

Re: Direct3D/OGL hooken bzw. Fraps-Nachbau - wie?
 
ich verweise mal auf den thread, da nicht immer doppelt in beide threads gepostet werden muss

http://www.delphipraxis.net/internal...ct.php?t=52353

dizzy 25. Apr 2005 21:07

Re: Direct3D/OGL hooken bzw. Fraps-Nachbau - wie?
 
Zitat:

Zitat von brechi
ich verweise mal auf den thread, da nicht immer doppelt in beide threads gepostet werden muss

:oops: Den hatte ich anfangs erst garnicht als SO ähnlich angesehen... *hirnknotenlös*. Ganz dicken Dank schon mal! Ich werd mir das morgen mal genauer zu Gemüte führen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz