Alte DirectX-Versionen: Welche ist sinnvoll benutzbar?



  • Ich wollte mal mit DirectX anfangen, allerdings hätte ich es gerne, daß mein Spiel auch auf Uralt-PCs funktioniert. Deshalb hab ich mir überlegt, mit einer älteren Version von DirectX zu programmieren, damit bei PCs, die nicht auf dem neuesten Stand sind, trotzdem die Chance besteht, daß das Spiel sofort funktioniert, ohne daß der Benutzer erst DirectX installieren muß. (DirectX 7 oder gar 8 sind also schon zu neuartig.)
    Und nun wollte ich mal fragen, wie das so ist: Ab wann fing DirectX eigentlich an, wirklich nützlich zu sein? Hat DirectX 1 schon die wesentlichen Dinge intus? Mein Spiel soll nichts Großes sein, eher Marke 80er-Jahre-Spiel. Ich brauche 2D-Grafik und Sound sowie Gamepad-Input. Welches war da das erste DirectX, mit dem man vernünftig programmieren konnte? (Gibt's auch vielleicht eine Seite, wo die verschiedenen Versionen verglichen werden?)



  • Auf welchen PCs soll es denn laufen? DX9 hat ja zB schon einige Jahre auf dem Buckel. Das Hauptproblem für dich dürfte es erstmal sein ein SDK zu finden ind em alte DX Versionen drin sind.



  • Wenn dir Kompatibilität am Herzen liegt, bist du dir dann sicher, dass die Verwendung von DirectX so sinnvoll ist? Du kannst ja auch einfach z.B. SetDIBitsToDevice zum Anzeigen verwenden.
    Funktioniert dann auch garantiert unter Windows 95, wenn du sonst keine neuere WinAPI-Funktionen verwendest.



  • Xebov schrieb:

    Auf welchen PCs soll es denn laufen? DX9 hat ja zB schon einige Jahre auf dem Buckel.

    Naja, möglichst auf allen 32 Bit-Windows-Systemen, inklusive Windows 95.

    Xebov schrieb:

    Das Hauptproblem für dich dürfte es erstmal sein ein SDK zu finden ind em alte DX Versionen drin sind.

    Wieso ist das ein Problem? Ich nehme dann eben das DirectX 1, 2, 3, 4, 5, wasauchimmer SDK. Und beim Endbenutzer sollte es ja so oder so funktionieren, da DirectX meines Wissens nach abwärtskompatibel ist.

    Athar schrieb:

    Wenn dir Kompatibilität am Herzen liegt, bist du dir dann sicher, dass die Verwendung von DirectX so sinnvoll ist? Du kannst ja auch einfach z.B. SetDIBitsToDevice zum Anzeigen verwenden. Funktioniert dann auch garantiert unter Windows 95, wenn du sonst keine neuere WinAPI-Funktionen verwendest.

    Ist das überhaupt schnell genug für ein Spiel?



  • NES-Spieler schrieb:

    Ist das überhaupt schnell genug für ein Spiel?

    Kommt natürlich drauf an, welche Auflösung du im Hinterkopf hattest.
    Auf einem Pentium 200 wirst du mit der Methode nicht weit kommen, aber auf einer 500 MHz-CPU dürfte ein Spiel bei 640x480 schon recht passabel laufen.
    Hängt natürlich auch davon ab, ob du ausgiebig Transparenz und Alphamaps einsetzt, das trübt die Performanz etwas.



  • Sagen wir's mal so: Wenn mir StretchBlt zu langsam ist, wird SetDIBitsToDevice schneller sein?



  • Naja, SetDIBitsToDevice kopiert ja nur, StretchBlt rechnet noch kräftig herum.
    Viel schneller als StretchBlt mit gleicher Quell- und Zielgröße wird SetDIBitsDevice auch nicht sein, da fällt bestenfalls einmal das Umkopieren des Grafikbuffers weg.



  • Ich würde in dieser Situation zu DirectDraw raten; am besten wohl mit DirectX 7 oder vielleicht auch 6. Das wäre schneller als GDI und dennoch so alt, dass es garantiert überall unterstützt wird^^



  • NES-Spieler schrieb:

    Naja, möglichst auf allen 32 Bit-Windows-Systemen, inklusive Windows 95.

    Das letzte DX da sunter Windows95 geht ist 8.0a. Ich weiß nicht genau wann sie DirectDraw eingestellt hatten, glaub das war ab DX8 somit wäre in DX7 die letzte DirectDraw Version drin. Ich hab allerdings schon ewig keine Rechner mit Windows9x mehr gesehen.



  • Athar schrieb:

    Naja, SetDIBitsToDevice kopiert ja nur, StretchBlt rechnet noch kräftig herum.
    Viel schneller als StretchBlt mit gleicher Quell- und Zielgröße wird SetDIBitsDevice auch nicht sein, da fällt bestenfalls einmal das Umkopieren des Grafikbuffers weg.

    Tja, dann ist die Funktion wohl nichts. Ich kann ja in meinem Spiel nicht nur die Originalgröße lassen. Hast Du schonmal ein Spiel mit einer Auflösung von 256 x 224 Pixeln auf einem 1024 x 768-Bildschirm gespielt? Also, bei einem NES-Emulator würde ich das zum Beispiel erstmal auf "mal 3" umstellen. Aber das bricht einem bei der GDI das Genick.

    /rant/ schrieb:

    Ich würde in dieser Situation zu DirectDraw raten; am besten wohl mit DirectX 7 oder vielleicht auch 6. Das wäre schneller als GDI und dennoch so alt, dass es garantiert überall unterstützt wird^^

    DirectDraw hätte ich sowieso gedacht. (Was auch sonst? Gibt's da noch was anderes?) Und das unterstützen: Nun ja, es geht nicht nur darum, daß es überall unterstützt wird, sondern darum, daß es mit hoher Wahrscheinlichkeit schon drauf ist und man im Zweifelsfall nur etwas Minimales nachinstallieren muß. Ich weiß, ich hab komische Vorstellungen, aber ich bin in der Beziehung nunmal ein Minimalist. Es kotzt mich an, wenn ich für ein 100 KB-Spiel erstmal was weiß ich nicht noch installieren muß. Weiterhin kotzt es mich manchmal an, wenn in Programmen irgendwelche unsinnigen Beschränkungen eingebaut werden: "Ja, ähm, wir haben das Programm jetzt unter anderem auf Unicode umgestellt, obwohl unsere ganzen Fenster und Dialoge sowieso nur in Standard-Englisch gehalten sind. Naja, wie auch immer, Ihr braucht für das Programm jetzt auf jeden Fall noch mindestens Windows XP SP 3, das .NET Framework 3.0 plus SDK, DirectX 10, 5 GHz und 1 GB Arbeitsspeicher. Wir wissen, die alte Version lief noch auf einem gerade frisch mit Windows 95 installierten Pentium II-Rechner mit 32 MB RAM. Aber naja, that's life."
    Ich würde ja DirectX 1 nehmen. 😃 Es sei denn natürlich, da sind bestimmte wichtige Features noch nicht vorhanden oder noch sehr unausgereift. Welches war denn die erste "wirkliche" Version? Hat da einer eine Ahnung?

    Xebov schrieb:

    Das letzte DX da sunter Windows95 geht ist 8.0a. Ich weiß nicht genau wann sie DirectDraw eingestellt hatten, glaub das war ab DX8 somit wäre in DX7 die letzte DirectDraw Version drin. Ich hab allerdings schon ewig keine Rechner mit Windows9x mehr gesehen.

    Was wird denn statt DirectDraw jetzt verwendet? Etwa Direct3D, wo die 2D-Grafik einfach oben auf eine Fläche gemalt wird?
    Ob es Computer mit diesen alten Betriebssystemen noch gibt, ist irrelevant. Das Spiel soll trotzdem auf allen Computern laufen.



  • NES-Spieler schrieb:

    Ich würde ja DirectX 1 nehmen. 😃 Es sei denn natürlich, da sind bestimmte wichtige Features noch nicht vorhanden oder noch sehr unausgereift. Welches war denn die erste "wirkliche" Version? Hat da einer eine Ahnung?

    Die ersten Versionen waren so naja. Wirklich gut wurde es glaub erst in die Richtung 3+.

    NES-Spieler schrieb:

    Was wird denn statt DirectDraw jetzt verwendet? Etwa Direct3D, wo die 2D-Grafik einfach oben auf eine Fläche gemalt wird?
    Ob es Computer mit diesen alten Betriebssystemen noch gibt, ist irrelevant. Das Spiel soll trotzdem auf allen Computern laufen.

    DirectDraw und Direct3D gabs ne Zeit lang nebeneinander, bei DX8 hat man sich dann entschieden DirectDraw einzustellen weil sich durch bessere technik 3D ohnehin weiter ausbreitete. DirectDraw ist aber bis heute ind en SDKs mit drin, halt in der letzten Version die jemals gemacht wurde.

    Irrelevant ist es nicht, wenn es kaum noch genutzt wird sollte man sich selbst fragen ob sich der Aufwand tatsächlich lohnt etwas dafür zurechtzuschneiden, imemrhin sind die technischen Grenzen unter Windows95 ja sehr eng.



  • Na wenn es denn wirklich so sein muss, dann verwende DirectDraw; etwas weiter verbreitetes wirst du mit Sicherheit nicht finden. Ausser du willst dein Programm ohne Betriebssystem direkt von einer Diskette starten und dann in Modus 13h usw... oh warte, heute haben die meisten PCs keine Diskettenlaufwerke mehr 😞


  • Mod

    gdi und directdraw sollten beide ueber die hardware beschleunigt werden, auch das stretchrect. wenn das nicht schnell genug ist, dann wuerde ich vermuten, dass die hardware es nicht schneller kann.



  • Ich glaub nicht, daß das daran liegt. Beim Game Boy-Emulator Visual Boy Advance kann man einstellen, mit welcher Technik die Grafik ausgegeben wird. Mit DirectDraw, Direct3D und OpenGL läuft das Spiel selbst bei vierfacher Vergörßerung noch genauso flüssig. Mit GDI geht er bereits bei doppelter Größe in die Knie.



  • Da du alle resourcenintensiven Zugriffe eh nur mit dem Hauptspeicher bewältigst und erst ganz zum Schluß per GDI ins Fenster kopierst,sollte es keine großen Unterschied machen ab der letzte Schritt per GDI, OGL oder DX passiert.

    Bei deinem Emu wird da sicherlich mehr mit GDI gemacht als einmal ins Fenster mit StretchBlt geblittet.

    Ich denke rapso hat da schon recht.

    Gruß Chris



  • justchris schrieb:

    Bei deinem Emu wird da sicherlich mehr mit GDI gemacht als einmal ins Fenster mit StretchBlt geblittet.

    Na und? Aber wenn es an der Hardware des PCs liegt, müßte doch der Emulator bei GDI und bei DirectX gleich schnell bzw. langsam sein.

    Nochmal die Zusammenstellung:

    Emulator mit GDI: Langsam
    Emulator mit DirectDraw, Direct3D oder OpenGL: Schnell
    Mein Programm mit GDI: Langsam

    Woher kommt jetzt die Schlußfolgerung, daß es an der Hardware liegt und daß mein Programm mit DirectDraw genauso langsam wäre wie mein Programm mit GDI?



  • NES-Spieler schrieb:

    Xebov schrieb:

    Das Hauptproblem für dich dürfte es erstmal sein ein SDK zu finden ind em alte DX Versionen drin sind.

    Wieso ist das ein Problem? Ich nehme dann eben das DirectX 1, 2, 3, 4, 5, wasauchimmer SDK.

    Hast du denn ein DX 1, 2, 3, 4, 5 SDK? Von Microsoft bekommt man das nichtmehr (MSDN Downloads gibt's nimmer). Compilieren kann man AFAIK Programme die alte DX Versionen verwenden auch mit neueren SDKs, aber die Beschreibung/Hilfe für ältere DX Versionen fehlt in den neueren SDKs leider.

    Und beim Endbenutzer sollte es ja so oder so funktionieren, da DirectX meines Wissens nach abwärtskompatibel ist.

    Dabei sehe ich auch kein Problem. D.h. es gibt einige Interfaces/Funktionen die gestrichen wurden, aber der einzige konkrete Fall den ich kenne betrifft irgendeine ganz alte Direct3D Version.



  • hustbaer schrieb:

    Hast du denn ein DX 1, 2, 3, 4, 5 SDK? Von Microsoft bekommt man das nichtmehr (MSDN Downloads gibt's nimmer). Compilieren kann man AFAIK Programme die alte DX Versionen verwenden auch mit neueren SDKs, aber die Beschreibung/Hilfe für ältere DX Versionen fehlt in den neueren SDKs leider.

    Das geht eigentlich nicht. Die SDKs enthalten nur die Libs und Header für DX9 10 und 11, und die letzte DirectDraw und DirectInput Versionen die es gab. Damit bekommt man also nix was auf DX <9 laufen soll Compiliert.



  • hustbaer schrieb:

    Hast du denn ein DX 1, 2, 3, 4, 5 SDK? Von Microsoft bekommt man das nichtmehr (MSDN Downloads gibt's nimmer).

    Also, ich hab jetzt bereits zwei Seiten gefunden, die das zum Download anbieten.

    Im Moment schwanke ich zwischen Version 2 und 3. Gibt es irgendwas in Version 3, das 2 noch nicht hat und das unverzichtbar ist?



  • Xebov schrieb:

    hustbaer schrieb:

    Hast du denn ein DX 1, 2, 3, 4, 5 SDK? Von Microsoft bekommt man das nichtmehr (MSDN Downloads gibt's nimmer). Compilieren kann man AFAIK Programme die alte DX Versionen verwenden auch mit neueren SDKs, aber die Beschreibung/Hilfe für ältere DX Versionen fehlt in den neueren SDKs leider.

    Das geht eigentlich nicht. Die SDKs enthalten nur die Libs und Header für DX9 10 und 11, und die letzte DirectDraw und DirectInput Versionen die es gab. Damit bekommt man also nix was auf DX <9 laufen soll Compiliert.

    Wenn du das sagst glaub ich dir das einfach mal 🙂
    Ich denke ich hab das letzte DirectDraw 7 Programm mit dem "2003 Summer Update" SDK compiliert. Das ist aber natürlich auch schon recht alt.

    BTW: Geht DirectDraw4 auch nimmer? Ich könnte mir vorstellen dass DirectDraw4 u.U. auch mit neueren SDKs noch geht, da DirectDraw4 soweit ich weiss noch das "aktuelle" DirectDraw für Windows CE ist...

    @NES-Spieler:
    Wenn du ein altes SDK gefunden hast ist ja alles gut 🙂
    Ich finde es auch ziemlich doof dass man die von MS nichtmehr direkt beziehen kann -- wenn man sie damals runtergeladen und aufgehoben hat (waren ja frei für jeden erhältlich), darf man sie heute ja auch noch nutzen.

    Was Version 2/3 angeht: ich wüsste nichts, was in DirectDraw "1" fehlen würde, was wirklich unverzichtbar ist. Einige Dinge sind halt anders, und einige fehlen.

    Persönlich würde ich aber vermutlich eher auf OpenGL, oder auf Direct3D8 setzen (für 2D Alpha-Blending - sieht halt hübscher aus als ohne). Beide funktionieren mit Windows 95. Natürlich muss man beide ggf. nachinstallieren, da weder OpenGL noch Direct3D8 bei Windows 95 vorinstalliert sind.


Anmelden zum Antworten