Textanzeige auf Vollbild-Spiel-DirectX?

Hi.

Vor einiger Zeit habe ich für ein Java-Projekt eine C-DLL geschrieben, in der ich mitunter eine Funktion bereitgestellt habe, irgendein Text auf einem Spiel zu zeichnen.
Das ganze habe ich über WinAPI-Funktionen gemacht.

Dies bringt/brachte Probleme:
-Flackern
-Starke Performance-Probleme
-Scheinbar auch teilweise SEs

Die Spiele, für die diese Funktion bereitgestellt werden, laufen auch schon auf sehr schwachen Rechner, dürften 300 MhZ aufwärts sein. Dementsprechend sollte wohl auch diese Funktion angepasst sein. Mit meiner Lösung ist dies nicht getan.

Nun stelle ich mir die Frage, ob DirectX das Problem lösen würde.
In wie weit würde die Performance gesteigert? Kann ich überhaupt auf einem DX6 Spiel mit irgendwelchen Funktionen von DX8 (dürfte das Niedrigste sein, wofür ich jetzt noch das SDK bekomme) arbeiten?

Ansonsten:
Hat jemand generell Erfahrung mit sowas? Ich würde den Thread hier mißbrauchen, um auch letztlich Code-mäßig Fragen zu stellen (von DirectX habe ich keine Ahnung, ich denke aber für eine Textanzeige dürfte es wohl reichen). Da wäre es wohl interessant zu wissen, ob ich mich hier an jemanden wenden kann, sollte es doch Probleme geben.

Mit freundlichen Grüßen
Morgyr

Also zuerst solltest Du wissen das DirectX nur auf Windows läuft, somit wäre die Plattformunabhängigkeit von Java für den Pops.
Desweiteren ist es IMHO nicht möglich DirectX 8 mit DirectX 6 zu mischen, anders herum wäre eher möglich, vorrausgesetzt in DX8 wird noch die alte API von DX6 unterstützt wird.
Soll der Text in ein laufendes Spiel angezeigt werden oder musst Du den Code des Spiels bearbeiten?
Angebrachter wäre eventuell OpenGL, damit wäre auch wieder die Plattformunabhängkeit bei behalten. Ansonsten ein „Overlay“ über eine laufende FullScreen-Anwendung sollte mit OpenGL möglich sein, aber wie gesagt weiß ich nicht was am Ende auf dem Overlay stehen soll.

Gut Schuß
VuuRWerK :wink:

Danke für die Antwort :wink:

Klar, DX ist von ja von Microsoft. Aber die Plattformunabhängigkeit ist egal.
Durch das Spiel und auch die DLL, die ja zwingend an Windows gebunden ist(auch weil es mit der WinAPI geschrieben ist), läuft das Projekt insgesamt nur auf Windows.

Der Code des Spiel muss bei der aktuellen Lösung nicht bearbeitet werden. Da wir den Code (noch) nicht haben, ist das wohl auch problematisch.
Die aktuelle Lösung benutzt, wenn ich mich recht errinnere, die WinAPI-Funktion DrawText und bekommt als Fenster-Handle das ermittelte Handel zum Spiel. Teilweise werden die Texte auf Menübildschirmen gezeichnet, aber auch im Spiel selbst. Dadurch brauchte ich eine while Schleife.

Grundsätzlich wäre es möglich, wenn ich die 6-SDK hätte und damit in der Lage bin einen Text zu zeichnen?
Mit OpenGL ist aber egal, ob da jetzt DX6 oder DX 9 hintersteckt? Und das könnte ohne Probleme laufen?

Mit freundlichen Grüßen
Morgyr

Das möchte ich mal nicht provezeihen aber es wäre jedenfalls möglich. Denn das handle des Fensters bekommst Du ja wieder über die WinAPI und dann mit OpenGL darauf zu zeichnen sollte IMHO gehen.
Hab es aber selber bei einer DX-Anwendung noch nicht gemacht.

Gut Schuß
VuuRWerK;)

Hmm. Ich werde es einfach mal probieren.

Sehe ich das richtig, dass es keine Funktion gibt, überhaupt einen String auszugeben? Dazu müsste ich den String letztlich in ein Bild, Rechtecke oder sonst was tun?

Mit freundlichen Grüßen
Morgyr

Klar gibts das, hier werden Sie geholfen.

Gut Schuß
VuuRWerK :wink:

Gut, danke. Nachdem ich davon die Hälfte ausprobiert habe und zu dem Entschluss bekommen bin, das aus irgendeinem Grund sehr viel nicht geht, bin ich bei einem Tutorial von NeHe hängen geblieben.

So habe ich mich entschieden, eine solche Bitmap Font zu benutzen. 2D reicht für den Zweck vollkommen aus.
Dazu gibt es auch ein Tutorial von NeHe, dessen Code dazu habe ich mir mal angeschaut. Wenn ich das richtig sehe, sind das wohl ganz normale Funktionen, die dort benutzt werden, keine extra Libraries.

Naja…es wird dabei immer ein neues Fenster geöffnet. Das brachte mir nun nicht viel, daher habe ich die komplette Fenster Initialisierung ausgebaut und für hwnd FindWindow() benutzt.

Ok. Scheinbar muss ein PixelFormat und ein aktueller RenderContext gesetzt werden. Dabei kommen Probleme auf. Das Setzen ist nicht möglich. (GetLastError, gibt mir in soweit keine Ausgabe, dass ich es nicht schaffe, das richtig gecastet zu bekommen, und scheinbar auch meine Konsole kaputt ist und generell nichts mehr anzeigen kann). hwnd ist nicht ungültig. Der DC dazu auch nicht. Muss ein Fenster irgendwelche Flags gesetzt bekommen, damit das möglich ist?

Des Weiteren, nebenbei und rein zum Verständnis, ich kann nirgendwo entdecken, dass auf das Fenster gezeichnet wird. Keine der Funktionen, die irgendwas zeichnen, haben irgendeinen Verweis, obs nun ein DC oder Wnd oder was auch immer ist, genauso gibt es Funktionen, die nicht auch nur ein Argument haben. Das heißt, diese beziehen sich auf den aktuellen Bildschirm? Ist dann FindWindow überhaupt nötig? Ich müsste nur testen, ob das Spiel im Vordergrund ist und kann das zeichen, oder nicht?
Zudem, was muss ich mit dem Fenster machen? Nun habe ich bereits ein Fenster, irgendwelche Flags sind gesetzt, und es ist ist ja auch scheinbar vorbereitet, um irgendwas zeichnen zu können. Demnach müsste ich nur den DC von dem Fenster bekommen und damit zeichnen, oder nicht?

Mit freundlichen Grüßen
Morgyr