Zitat Zitat von Ineluki Beitrag anzeigen
Die Bilder sehen an sich schon mal ganz Nett aus. Allerdings sind mir die Farben etwas zu

grell eingestellt, so dass sich manche dinge nicht wirklich abheben.

Leider spiele ich keine Spiele, so dass ich weder etwas testen koennte noch es fuer mich ueberaus nuetzlich waere

... trotzdem finde ich die idee ueberaus reizend.

Wenn dein Freund auf eine grosse Fangemeinde aus ist, koennte er ja mal testen, ob sein Programm auch im Hinblick

auf den Rm2k und Nachfolger nutzbar ist. Damit waeren ihm wohl die Herzen hunderter Nutzer sicher, die sich schon

seit Ewigkeiten aufgepeppte Graphiken wuenschen.

Wenn er darauf bestehen sollte, seinen Code hier nicht zu veroeffentlichen, koennte er sich doch vielleicht

wenigstens dazu hinreissen lassen, eine theoretische Abhandlung zu dem Thema zu schreiben ... das wuerde sicherlich

dem einen oder andern hier interessante Impulse geben.

Z.B. koennte er erklaehren, wie er genau diese Effekte gemacht hat, am besten nicht DirectX Abhaengig erklaehren.

Dann koennten vielleicht auch einige OpenGL Programmierer hier davon profitieren.

Alles in allem scheint es eine durchaus beeindruckende Arbeit zu sein, sollte alles gehalten werden, was

versprochen wurde ...
Hallo,

ich bin der Entwickler von Helan und hoffe es wird mir verziehen das ich einen solch alten Thread wieder zum leben erwecke.

Ich wollte schon lange antworten aber es kam so einiges immer dazwischen (Zeit, Arbeit, Launen, etc.). Gerne bin ich bereit ein wenig zu erklären wie das ganze aktuell funktioniert und auch wie es zur Zeit als dieser Thread erstellt wurde funktionierte (damals wurde zB eine andere Technik verwendet die nicht unbedingt schlechter war sondern etwas spezialisierter.) Aktuell möchte ich nur eine grobe Übersicht vermitteln wie es im aktuellen Stand abläuft (Helan ist weiterhin nur noch Alpha da ich das projekt vor einiger zeit neu aufgesetzt habe.).

Wie funktioniert Helan?

Helan baut auf 3 Phasen auf, 1. "Initialisierungsphase", welche im Grundriss der Initialisierungsphase von Fraps ähnelt, es erstellt einen globalen Windowshook welches dafür sorgt das die DLL in der sich die Hookprozedur befindet in JEDEN laufenden Prozess geladen wird (SetWindowsHookEx). Durch den DLL Einstiegspunkt der dadurch aufgerufen wird kann ich nun zB. alles weitere vorbereiten.

Dadurch kann Phase 2 ermöglicht werden, die "Hijackphase". in dieser Phase werden dringend benötigte Methoden/Funktionen aufgebrochen und eigener Code eingeschleust, zb hijacke ich die Direct3DCreate9 Funktion um später weiter führende Methoden wie EndScene, Reset und Release zu hijacken (dieser Umweg über Direct3DCreate9 ist nötig da ich nur so tiefer in die DirectX Ebene gehen kann, da alles weitere von D3D auf Interfaces aufbaut und an deren Methoden komme ich nur über den VTable heran wofür eine Instanz der Klasse für dieses Interface erstellt werden muss.). Das hijacken dieser Funktionen/Methoden ist recht einfach über "detours" möglich
(http://research.microsoft.com/sn/detours/).

Habe ich nun den Code der alten Methoden durch meine Methoden ersetzt kann es auch schon in die 3. Phase gehen, die "DrawFunnyStuffPhase", hier nutze ich die Möglichkeit aus nach zb EndScene selber zu rendern, zum einen ein Menü mit dem ich Parameter von diversen Effekten in Helan setzen kann oder eben die Postprocessingeffekte wie Bloom/Tonemapping, DepthOfField oder noch neuer SSAO (noch in Entwicklung ). Die Erklärung der diversen PostProcessing Effekte spare ich mir hier nun, da ich euch nun evtl sowieso schon zu tode gelangweilt habe (auf Anfrage kann ich aber auch dazu eine Menge erzählen).

Zu beachten wäre noch das man alle Resourcen die man erstellt hat auch irgendwann frei geben muss, dazu nutze ich zum einen die gehijackte Methode "Release" zum anderen bemerke ich das indem ich einen localen Windowshook laufen lasse der mir auskunft über WindowsMessages wie WM_QUIT gibt.

Unter OpenGL ist dies alles weitaus einfacher da man sich nicht mit den VTables herumschlagen muss und sich einiges an Kopfzerbrechen über Klassenfunctionpointer ersparen kann.

Nich vergessen sollte man auch das man den globalen Hook wieder entfernt, denn nichts ist nerviger als eine Dll die sich nicht löschen lässt weil sie grade benutzt wird (von zig Prozessen zB.) dazu einfach UnhookWindowsHookEx verwenden.

Beispiele und Erklärungen werde ich gerne geben, wenn ich denn nicht schon dafür gebannt werde das ich einen solch alten Thread wiederbelebt habe

mfg Mark