Forum: PC-Programmierung DirectX 9 oder 11 verwenden?


von brechbunkt (Gast)


Lesenswert?

Hallo,

ich habe einen (ein bisschen) älteren Rechner. Noch läuft auf ihm XP. Es 
soll aber demnächst ein neueres Windows aufgespielt werden. Auf diesem 
Rechner habe ich bereits für DirectX_9 programmiert. Nun möchte ich ein 
ähnliches Programm erneut schreiben (den alten Code kann ich leider 
nicht mehr verwenden).

Jetzt stehe ich allerdings vor der Frage ob ich gleich das DirectX11_SDK 
verwenden soll. Schließlich möchte ich vermeiden, irgendwann das ganze 
neu schreiben zu müssen, weil sich eventuell die API geändert hat. Ein 
neuer Rechner wird schließlich ganz bestimmt mal kommen.

Glaubt ihr es macht Sinn DirectX_11 zu verwenden? Oder bringt das eher 
nichts, da ich mit meinem Rechner eh nicht die Funktionen vom neuen 
11’er nutzen kann?

von T.roll (Gast)


Lesenswert?

Du solltest besser gleich OpenGL benutzen.

Sonst hast du in ein paar Jahren wieder:
>Schließlich möchte ich vermeiden, irgendwann das ganze
>neu schreiben zu müssen

von brechbunkt (Gast)


Lesenswert?

OpenGL geht für mich leider nicht. Genau genommen benötige ich (zur 
Zeit) nur die Ansteuerung für Joystick und vor allem die Ansteuerung 
dessen force-feedback.

von sebi707 (Gast)


Lesenswert?

Wenn du nur Joystick Ansteuerung machst arbeitest du wohl eher mit 
DirectInput statt mit DX9 nehme ich an? Der Nachfolger von DirectInput 
heißt XInput aber soweit ich das gesehen habe kann man damit nur Xbox360 
Controller ansteuern und nicht irgendwelche Joysticks. DirectInput ist 
aber auch noch in Windows 8.1 vorhanden also ein Umstieg von Windows XP 
zu etwas neuerem ist kein Grund von DirectInput wegzugehen.

von Borislav B. (boris_b)


Lesenswert?

T.roll schrieb:
> Du solltest besser gleich OpenGL benutzen.
> Sonst hast du in ein paar Jahren wieder:

Steht OpenGL nicht gerade vor einem Komplettumbau (u.A. wegen Mantle)?
Daher würde ich im Moment nicht mit OpenGL einsteigen...

DirectX bietet darüber hinaus ein rundes Gesamtpaket, von der Eingabe 
über Audio und Video bis hin zu 3D. Ich würde daher zu DX 11 tendieren.

von Rolf M. (rmagnus)


Lesenswert?

Boris P. schrieb:
> T.roll schrieb:
>> Du solltest besser gleich OpenGL benutzen.
>> Sonst hast du in ein paar Jahren wieder:
>
> Steht OpenGL nicht gerade vor einem Komplettumbau (u.A. wegen Mantle)?
> Daher würde ich im Moment nicht mit OpenGL einsteigen...

Generell steht da wohl ein Generationenwechsel an. OpenGL wird komplett 
umgebaut, und neben Mantle gibt's noch andere neue APIs, die angeblich 
erheblich schneller als die Klassiker OpenGL und DirectX sein sollen. Da 
wird sich in naher Zukunft wohl so einiges tun. Davon bleibt man bei 
DirectX aber vermutlich genauso wenig verschont.

> DirectX bietet darüber hinaus ein rundes Gesamtpaket, von der Eingabe
> über Audio und Video bis hin zu 3D.

Dafür allerdings ausschließlich unter Windows. Und OpenGL zusammen mit 
SDL kann auch schon einiges, evtl. noch mit OpenAL für den Sound.

von Borislav B. (boris_b)


Lesenswert?

Rolf Magnus schrieb:
> Dafür allerdings ausschließlich unter Windows. Und OpenGL zusammen mit
> SDL kann auch schon einiges, evtl. noch mit OpenAL für den Sound.

Klar, es gibt für alles Alternativen. Aber bei DX folgt zumindest jede 
API dem gleichen Programmierkonzept und den gleichen Namenskonventionen. 
Das macht das Leben leichter.
Da der TO ja bisher auch auf DX gesetzt hat, scheint Windows-Only ja 
kein Problem für ihn zu sein (sonst wäre DX natürlich sofort aus dem 
Rennen).

: Bearbeitet durch User
von brechbunkt (Gast)


Lesenswert?

Boris P. schrieb:
> ...scheint Windows-Only ja kein Problem für ihn zu sein...

Na ja... ist ein wenig verzwickt :)
Genau genommen habe ich ein Programm in Qt geschrieben. Qt unterstützt 
jedoch nicht die Ansteuerung von Joysticks mit Force-Feedback. Ich habe 
zwar noch keine Anwendung für ein anderes OS als Windows, hätte es mir 
aber gerne offen gehalten.
Nun war mein Gedanke den Joystick per DirecX anzusteuern und die zwei 
Programme über local network (nennt sich doch so?), also rein auf dem 
Rechner selbst, miteinander kommunizieren zu lassen. Sollte irgendwann 
ein anderes OS in Frage kommen, bräuchte ich also nur einen "kleineren" 
Teil neu schreiben.

von Borislav B. (boris_b)


Lesenswert?

brechbunkt schrieb:
> un war mein Gedanke den Joystick per DirecX anzusteuern und die zwei
> Programme über local network (nennt sich doch so?), also rein auf dem
> Rechner selbst, miteinander kommunizieren zu lassen.

Yikes! Das klingt nicht so besonders geschickt...
Warum willst du das in zwei programme aufteilen?

Du kannst ja auch in deiner Qt Anwendung mit DirectX (XInput) arbeiten. 
Aber es gibt sicherlich auch eine portable Lösung um einen Joystick 
einzubinden (SDL?)...

: Bearbeitet durch User
von physiker (Gast)


Lesenswert?

Kurzes googlen hat dieses hier gefunden:
http://en.wikipedia.org/wiki/Object_Oriented_Input_System

Kleine C++ library, die unter Linux und Windows diverse Eingabegeräte 
unterstützt, einschliesslich Force Feeback. Wird auch von Ogre3D 
genutzt.

von physiker (Gast)


Lesenswert?

In dem Modualisieren sehe ich hier auch keinen Vorteil, nur zusätzlichen 
Aufwand und Fehlerquellen.

von brechbunkt (Gast)


Lesenswert?

Von SDL hatte ich zuvor noch nie etwas gehört. Macht aber einen ganz 
guten Eindruck. Um die Kommunikation mit dem Qt-Programm würde ich hier 
natürlich ebenfalls nicht rumm kommen.

Eigentlich hatte ich mich zuvor mit Google auf die Suche gemacht und war 
nun der Meinung, dass XInput nicht in Qt eingebunden wurde. Dank deinen 
Hinweis habe ich nun aber noch mal geschaut und ein "Qt XInput Extension 
0.0.1" gefunden. Die Versionsnummer macht mir allerdings ein wenig 
Bauchschmerzen. Erfahrungsgemäß sind die Kinderkrankheiten anfangs immer 
so hoch, dass man immer nur auf Probleme stößt und hier und da mit einer 
"Frickel-Lösung" aushelfen muss. Nach bereits bekannten Lösungswegen 
googlen hilft dann auch immer nicht viel ;)

von brechbunkt (Gast)


Lesenswert?

So wie ich das sehe, können durch die Einbindung von XInput im Qt zwar 
die Achsen und die Buttons eingelesen werden, aber die Ansteuerung für 
das force-feedback wurde nicht implementiert.

von sebi707 (Gast)


Lesenswert?

Warum brauchst du XInput eingebunden in Qt? Verwende doch einfach direkt 
XInput in deinen Funktionen, die das brauchen. Oder was soll überhaupt 
durch den Joystick gesteuern werden? Wenn man damit die Menüelemente 
wählen soll müsste man tatsächlich gucken, wie man die 
Joystickbewegungen an Qt weiter gibt aber selbst das müsste machbar 
sein. Kommunikation zwischen XInput/DirectInput/SDL und dem Rest deines 
Programms findet einfach über Funktionsaufrufe statt. Da noch einen 
Netzwerklayer zwischen zu schieben macht alles nur viel komplizierter 
und bringt überhaupt nichts.

von brechbunkt (Gast)


Lesenswert?

sebi707 schrieb:
> ...Oder was soll überhaupt durch den Joystick gesteuern werden?

Ein kleiner Roboter auf vier Rädern. Wird anhand der Ultraschallsensoren 
ein Hindernis in der Nähe erkannt, möchte ich diese durch Rückmeldung 
vom force-feedback spürbar machen.


sebi707 schrieb:
> Warum brauchst du XInput eingebunden in Qt? Verwende doch einfach direkt
> XInput in deinen Funktionen, die das brauchen. ... Kommunikation zwischen 
XInput/DirectInput/SDL und dem Rest deines
> Programms findet einfach über Funktionsaufrufe statt.

Ich kann das ganze dann also ganz normal mit Funktionen wie alle anderen 
aufrufen? Einfach lib einbinden und los? Da muss ich mich mal schlau 
machen wie der Code überhaupt aussehen muss. Werde mal nach ein paar 
Beispielen googlen...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.