DirectX lernen
-
Hi,
da es ja noch viele Rechner gibt die keine DirectX 10 fähige Grafikkarte haben, sollte man wohl versuchen seine Programme immer noch DirectX 9 kompatibel zu halten. Ich frage mich allerdings gerade ob es noch Sinn macht DirectX 9 zu lernen, oder ob sich da seit DX10/11 schon zu viel geändert hat?
Und wo fängt man wohl am besten an zu lernen?
-
Worauf stützt du diese Aussage?
Eine verlässliche Quelle für Hardware ist Steam:
http://store.steampowered.com/hwsurvey56.36% aller Steam User haben eine DirectX10 Grafikkarte.
-
Genau, und das heißt doch dass immerhin fast die Hälfte der Spieler eben keine DX10 Karte haben, bei DX11 siehts noch dünner aus. (Fast die Hälfte sind für mich "viele"^^)
Aber es stellt sich halt die Frage, ob die API von 9 auf 10 bzw. 11 völlig anders ist, oder ob man auch erst DX9 lernen und danach mit etwas Einarbeitung auch zu 10/11 wechseln kann.
-
Also ich glaube DX10/11 sind zu DX9 völlig verschieden, wenn man sich mal die SDK Beispiele anguckt..
DX11 wird also wohl mehr lohnen als DX9.
-
frag0r schrieb:
Genau, und das heißt doch dass immerhin fast die Hälfte der Spieler eben keine DX10 Karte haben, bei DX11 siehts noch dünner aus. (Fast die Hälfte sind für mich "viele"^^)
Aber es stellt sich halt die Frage, ob die API von 9 auf 10 bzw. 11 völlig anders ist, oder ob man auch erst DX9 lernen und danach mit etwas Einarbeitung auch zu 10/11 wechseln kann.Wenn es dir zu viel ist, dann nimm DX9. Aber nur wenn du eine konkrete Vorstellung davon hast, dass du jetzt ein Spiel gezielt machen kannst/willst.
Wenn nicht, dann bleibt es immer noch dir überlassen.
Diese Frage ist nicht so einfach zu beantworten.
-
D3D10/11 sind im Gegensatz zu D3D9 anders was rein die API angeht. Die Grundprinzipien sind aber natürlich gleich. Wenn du D3D9 wirklich beherrscht geht der Umstieg zu D3D11 praktisch von allein da D3D11 einfach die logische Weiterentwicklung von D3D9 ist. D3D10 kannst du eigentlich ignorieren, es gibt keinen einzigen Grund warum man heute noch D3D10 würde verwenden wollen. D3D11 kann in wichtigen Bereichen mehr als D3D10, läuft im Gegensatz zu D3D10 auch auf D3D9 Hardware und bietet sogar auf D3D10 Hardware Features die mit D3D10 nicht benutzbar sind. Die Frage ist also nur D3D9 oder D3D11. Und damit reduziert sich das ganze auf Windows XP Support Ja oder Nein? D3D11 läuft nur ab Vista aufwärts, wenn du also XP noch Unterstützen willst dann wirst du wohl oder übel D3D9 verwenden müssen. Ansonsten ist D3D11 die API der Wahl. Für Anfänger ist D3D9 evtl. auch noch interessant da es imo eine um einiges flachere Lernkurve hat als D3D11.
-
Ok, danke für diese Einschätzung. Ich habe mir mal das DX SDK gesaugt, und werde wohl erstmal mit DX9 anfangen, die DX11 Shader sind mir suspekt
Falls jemand da gute Tutorials anzubieten hat, immer her damit, ich lese mich momentan eigentlich nur durch die SDK Samples.
-
dot schrieb:
Die Frage ist also nur D3D9 oder D3D11. Und damit reduziert sich das ganze auf Windows XP Support Ja oder Nein? D3D11 läuft nur ab Vista aufwärts, wenn du also XP noch Unterstützen willst dann wirst du wohl oder übel D3D9 verwenden müssen. Ansonsten ist D3D11 die API der Wahl.
Wer Windows XP noch unterstützen will, der benutzt heute für die 3d Grafik besser OpenGL 4.x, denn OpenGL läuft auf Windows XP UND den moderneren Nachfolgern aber bietet auch technisch das, was D3D11 bietet.
Mit OpenGL 4.x ist man also in beiden Welten Zuhause. Moderne API und trotzdem alle Windows Versionen ab AFAIK mind. Win 2000.
-
Ogl schrieb:
Wer Windows XP noch unterstützen will, der benutzt heute für die 3d Grafik besser OpenGL 4.x, denn OpenGL läuft auf Windows XP UND den moderneren Nachfolgern aber bietet auch technisch das, was D3D11 bietet.
Mit OpenGL 4.x ist man also in beiden Welten Zuhause. Moderne API und trotzdem alle Windows Versionen ab AFAIK mind. Win 2000.OpenGL 4.x ist zwar Featuremäßig nun annähernd (afaik nicht ganz) auf Augenhöhe mit D3D11, von einer "modernen API" ist es aber meilenweit entfernt wenn du mich fragst. Ein weiteres Problem mit OpenGL ist die Tatsache dass Intel Grafikkarten furchtbar schlechten OpenGL Support haben, wenn du auch auf Intel Karten mit deiner Performance in den Bereich interaktiver Frameraten vorstoßen willst ist Direct3D die einzige Option. Daran ist natürlich nicht OpenGL schuld sondern Intel, aber Intel GPUs sind nunmal in schwächeren Computern (Laptops, Netbooks) sehr verbreitet. Und wer Windows XP unterstützen will zielt wohl auf dieses Segment ab...
-
Ogl schrieb:
dot schrieb:
Die Frage ist also nur D3D9 oder D3D11. Und damit reduziert sich das ganze auf Windows XP Support Ja oder Nein? D3D11 läuft nur ab Vista aufwärts, wenn du also XP noch Unterstützen willst dann wirst du wohl oder übel D3D9 verwenden müssen. Ansonsten ist D3D11 die API der Wahl.
Wer Windows XP noch unterstützen will, der benutzt heute für die 3d Grafik besser OpenGL 4.x, denn OpenGL läuft auf Windows XP UND den moderneren Nachfolgern aber bietet auch technisch das, was D3D11 bietet.
Mit OpenGL 4.x ist man also in beiden Welten Zuhause. Moderne API und trotzdem alle Windows Versionen ab AFAIK mind. Win 2000.Wer sich ne DX11 Karte kauft, wird wohl kaum auf XP hocken^^.
-
OT: Davon abgesehen gibt es sowieso keinen Grund mehr auf XP zu hocken. Update und Treiberunterstützung werden runtergefahren, Software richtet sich an Windows 7 aus und und und. Ich denke aber auch das sich die Wahl der Schnittstelle an den Features orientieren sollten bzw. am Problem und nicht unbedingt an dem was alles möglich ist.
MkG Nas
-
dot schrieb:
OpenGL 4.x ist zwar Featuremäßig nun annähernd (afaik nicht ganz) auf Augenhöhe mit D3D11,
Was fehlt denn deiner Meinung nach?
von einer "modernen API" ist es aber meilenweit entfernt wenn du mich fragst.
Was ist denn für dich eine moderne API?
Etwa eine API die in C++ geschrieben wurde?Wenn ja, dann ist das ein sehr schlechtes Argument, denn OpenGL ist bewußt in C geschrieben weil OpenGL als Industriestandard nunmal von allen Programmiersprachen benutzt werden können soll und eine API in der Programmiersprache C bietet hier eben die beste Kompatibilität.
C++ kann das nicht bieten, deswegen verwendet man bei OpenGL ganz bewußt kein C++.Ansonsten ist OpenGL für eine C API sehr modern, ich wüßte nicht, warum das altbacken sein soll.
Ein weiteres Problem mit OpenGL ist die Tatsache dass Intel Grafikkarten furchtbar schlechten OpenGL Support haben, wenn du auch auf Intel Karten mit deiner Performance in den Bereich interaktiver Frameraten vorstoßen willst ist Direct3D die einzige Option. Daran ist natürlich nicht OpenGL schuld sondern Intel, aber Intel GPUs sind nunmal in schwächeren Computern (Laptops, Netbooks) sehr verbreitet. Und wer Windows XP unterstützen will zielt wohl auf dieses Segment ab...
Wer 3d nutzen will, der kauft sowieso keine Intel Grafikkarte.
Dafür waren Intel Grafikchips noch nie gut geeignet und die Treiber waren schon immer schlecht, auch unter Direct3d sind die Intel Treiber sehr schlecht, wenn man sie mit der Qualität der Treiber von ATI oder NVidia vergleicht.
Außerdem kann man mit OpenGL das Programm auch für Mac OS X und Linux entwickeln, mit Direct3d geht das nicht.
-
Scorcher24 schrieb:
Wer sich ne DX11 Karte kauft, wird wohl kaum auf XP hocken^^.
Ich habe eine Geforce 450 GTS, die ist prinzipiell DX11 fähig, aber ich nutze noch Windows XP weil ich eben auch OpenGL nutze und Windows 7 daher noch nicht brauche.
-
Ogl schrieb:
Scorcher24 schrieb:
Wer sich ne DX11 Karte kauft, wird wohl kaum auf XP hocken^^.
Ich habe eine Geforce 450 GTS, die ist prinzipiell DX11 fähig, aber ich nutze noch Windows XP weil ich eben auch OpenGL nutze und Windows 7 daher noch nicht brauche.
Was ne Verschwendung...
-
Scorcher24 schrieb:
Ogl schrieb:
Scorcher24 schrieb:
Wer sich ne DX11 Karte kauft, wird wohl kaum auf XP hocken^^.
Ich habe eine Geforce 450 GTS, die ist prinzipiell DX11 fähig, aber ich nutze noch Windows XP weil ich eben auch OpenGL nutze und Windows 7 daher noch nicht brauche.
Was ne Verschwendung...
Da wird gar nichts verschwendet!
Mit OpenGL 4.0 kann ich die Grafikkarte voll ausreizen und das gilt sowohl Featuremäßig als auch Leistungsmäßig.
Also, was willst du mir sagen?
Das du ein Gamer bist, der nur an nagelneue Computerspiele, DirectX 11 und Windows 7 denkt und nur deswegen gute Grafikkarten kauft?
-
Naja, wenn ich ne DX11 Graka hätte, würde ich auch meine Games mit DX11 zocken wollen. Grade auf das erscheinende BF3 schielend würde Vista oder 7 da schon seinen Nutzen haben.
-
Ogl schrieb:
dot schrieb:
OpenGL 4.x ist zwar Featuremäßig nun annähernd (afaik nicht ganz) auf Augenhöhe mit D3D11,
Was fehlt denn deiner Meinung nach?
Es gibt nun zwar endlich Program Binaries, da die jetzt aber erst wieder maschinenspezifisch gemacht wurden sind sie nichtmal annähernd so nützlich wie das was es in Direct3D seit nun 10 Jahren gibt.
Wie schauts aus mit Multithreaded Rendering?
Hast du schonmal OpenGL Anwendungen geschrieben die mit mehreren Displays und Grafikkarten rendern?
Append Buffer gibts nun ja nun offenbar endlich auch in OpenCL aber afaik gibt es keine Möglichkeit in OpenGL Shadern auf Compute-Funktionalität zuzugreifen, wie z.B. ein Fragment Shader der Scattered Writes in einen GPU Buffer durchführt, was in D3D11 alles kein Problem ist und von einigen fortgeschrittenen Techniken benutzt wird (z.B. ein Fragment-Level Depth-Sort für order indenpendent Transparency).Ja, wenn es um die großen Punkte auf der New Features Liste geht haben wir nun Gleichstand. Aber wenn man etwas genauer schaut eben doch nicht.
Ogl schrieb:
von einer "modernen API" ist es aber meilenweit entfernt wenn du mich fragst.
Was ist denn für dich eine moderne API?
Etwa eine API die in C++ geschrieben wurde?Mit C vs C++ hat das nichts zu tun. D3D basiert übrigens auf COM und kann daher auch von allen möglichen Sprachen (ja, auch C) benutzt werden, aber das nur nebenbei.
Im OpenGL Modell gibt es einfach einen riesigen globalen State. In D3D11 ist praktisch alles an State irgendwie gekapselt. Selbst wenn ich irgendwelche Objekte manipulieren will muss ich dies in OpenGL wegen des komischen Objektmodells über den globalen State erledigen. Ich kann nicht einfach den Texturfilter für Textur xyz setzen. Ich muss erst Textur xyz als aktuelles Texturobjekt in meinen globalen State binden und kann erst dann was damit machen. Die Erzeugung der Objekte ist durch dieses System mit den names auf mehrere Funktionen verteilt. Ich muss mir z.B. erst über glGenTextures() einen name holen diesen Binden und erzeuge erst dann mit glTexImage2D() mein eigentliches Objekt. Das ist nicht nur rein äußerlich unnötig komplex sondern auch für die Implementierung darunter sodass dieses ganze Bind Zeug unter Umständen sogar zu Performance-relevantem Overhead wird. Nicht umsonst bietet NVIDIA über eine Extension eine Bindless API an.
Ogl schrieb:
Wer 3d nutzen will, der kauft sowieso keine Intel Grafikkarte.
Dafür waren Intel Grafikchips noch nie gut geeignet und die Treiber waren schon immer schlecht, auch unter Direct3d sind die Intel Treiber sehr schlecht, wenn man sie mit der Qualität der Treiber von ATI oder NVidia vergleicht.
Außerdem kann man mit OpenGL das Programm auch für Mac OS X und Linux entwickeln, mit Direct3d geht das nicht.Die Portabilität ist imo das einzige Argument das für OpenGL spricht.
Der Direct3D Support von Intel ist eben dramatisch besser was die Performance angeht (wir reden hier nicht von ein paar FPS sondern unter Umständen von benutzbar vs. unbenutzbar). Natürlich liegt das nicht an OpenGL an sich sondern an Intel, trotzdem etwas was man bedenken sollte. Und dass sich Leute die 3D nutzen wollen keine Intel GPUs kaufen kann ich leider aus leidvoller Erfahrung nicht bestätigen, du glaubst gar nicht was ich da schon erlebt hab. Außerdem sind ja nicht alles Gamer und alle 3D Anwendungen gleich extrem professionelle High Performance Sachen wo man eben evtl. doch will dass es auch auf Mamis Laptop oder unterwegs am Netbook, der ja eigentlich eine voll D3D10 fähige GPU hätte, so gut wie möglich läuft...
-
Scorcher24 schrieb:
Naja, wenn ich ne DX11 Graka hätte, würde ich auch meine Games mit DX11 zocken wollen. Grade auf das erscheinende BF3 schielend würde Vista oder 7 da schon seinen Nutzen haben.
Ich sag ja du bist ein Gamer. Ich habe aber überhaupt kein DX11 Spiel, was soll ich da also zocken?
Und die Spiele die ich habe, die laufen unter WinXP sogar besser, unter Windows 7 laufen manche von denen gar nicht.
Windows 7 zu kaufen wäre also Verschwendung von Geld.
-
dot schrieb:
Die Portabilität ist imo das einzige Argument das für OpenGL spricht.
Der Direct3D Support von Intel ist eben dramatisch besser was die Performance angeht (wir reden hier nicht von ein paar FPS sondern von wirklich benutzbar vs. unbenutzbar). Natürlich liegt das nicht an OpenGL an sich sondern an Intel, trotzdem etwas was man bedenken sollte.Und wenn du deine Anwendungen nun für DX11 schreibst, denkst du dann, daß der Treibersupport bei Intel für OpenGL besser wird?
Warum sollte Intel Geld in die Treiber für OpenGL stecken, wenn Leute wie du alle Anwendungen sowieso für DX11 schreiben?
-
Ogl schrieb:
dot schrieb:
Die Portabilität ist imo das einzige Argument das für OpenGL spricht.
Der Direct3D Support von Intel ist eben dramatisch besser was die Performance angeht (wir reden hier nicht von ein paar FPS sondern von wirklich benutzbar vs. unbenutzbar). Natürlich liegt das nicht an OpenGL an sich sondern an Intel, trotzdem etwas was man bedenken sollte.Und wenn du deine Anwendungen nun für DX11 schreibst, denkst du dann, daß der Treibersupport bei Intel für OpenGL besser wird?
Warum sollte Intel Geld in die Treiber für OpenGL stecken, wenn Leute wie du alle Anwendungen sowieso für DX11 schreiben?
Nachtrag:
Denkt doch nur mal an ID Software.
Nur wegen ID Software können es die Gamer verdanken, daß sich die Grafikkartenhersteller bezügl. ihrer Treiber für OpenGL und Spiele in der Vergangenheit bemüht haben.
Ohne ID Software hätten wohl alle viel früher auf Direct3d gesetzt.