Seite 1 von 1

DirectX und OpenGL in einem Programm

Verfasst: 30.12.2008 09:32
von Sven
Kann ich die DirectX und OpenGL Subsystems so einbinden, dass ich aus dem Programm heraus (meinetwegen nach Neustart des Programms) entscheiden kann, welches zum Einsatz kommt? So wie es z.B. Google Earth macht.

Verfasst: 03.01.2009 11:55
von Gimbly
Schätze, das geht nicht. Du kannst ja das Prog nur mit einem SubSystem kompilieren. Du müsstest also ein kleines Startprogramm vorschalten, welches dann je nach gewünschem SubSystem die entsprechende EXE mit RunProgram() aufruft.

In diesem Zusammenhang würde mich interessieren, wie man herausfinden kann, welche DirectX-Version beim User installiert ist, um dazu passend eine mit DX7 oder DX9 kompilierte EXE aufzurufen.

Verfasst: 03.01.2009 16:10
von PMV
Sicherlich wirst in der API nen entsprechenden Eintrag finden ...
ansonnsten denke ich mal, das DirectX selber einen entsprechenden
Befehl hat ...

Mir ist ebenfalls keine Möglichkeit bewusst, in PB DirectX und OpenGL
gleichzeitig zu aktivieren und diese zur Laufzeit aus zu wählen.

MFG PMV

Verfasst: 03.01.2009 18:22
von Gimbly
Was passiert eigentlich, wenn man eine mit DX9 compilierte EXE auf einem System ausführt, das nur DX7 hat? Scheitern dann alle DirectX-Aufrufe (also auch InitSprite()) oder nur diejenigen, die es bei DX7 nicht gibt?

Verfasst: 03.01.2009 18:54
von PMV
InitSprite() sollte #False zurück geben und damit kann dein Spiel nicht
ausgeführt werden.

MFG PMV

Verfasst: 03.01.2009 19:15
von Kaeru Gaman
natürlich kann man grundsätzlich in einem programm jede routine die mit Grafikausgabe zu tun hat zweimal anlegen und zur laufzeit entscheiden, welche ausgeführt werden soll.

in PB wird das wohl etwas komplizierter, weil hier je nach Subsystem andere Libs eingebunden werden, es steht also pro Kompilat nur ein Subsystem zur Verfügung.
hier würde sich anbieten sämtliche Grafikausgaben in zwei DLLs zu kompileren, eine mit DX und eine mit oGL, und je nach wunsch oder system lädt das hauptprogramm die eine oder die andere DLL.

... ausprobiert habe ich sowas aber noch nicht...

Verfasst: 04.01.2009 01:36
von PMV
Probleme könnte es aber mit der PB-Lizenz geben ... da Wrapper-DLLs
nicht erlaubt sind. Ob das allerdings hier greifen würde liegt wohl auch
darann, was am ende für ein Aufwand für die DLLs nötig ist, also wie
viel mehr als Befehlwrappen nötig sein dürfte. ... oh je ... hoffe verstehst,
was ich sagen will :oops:

MFG PMV

Verfasst: 04.01.2009 01:53
von Kaeru Gaman
ist mir klar...

also, meine Idee läuft nicht darauf hinaus, die PB-Befehle direkt in die DLLs zu packen, das wäre ja ein Lizenzverstoß.

vielmehr meine ich, sämtliche Procedures deines Projektes die auf das Grafik-Subsystem zugreifen,
je zweimal in DLLs zu packen, eine für oGL und eine für DX.
die DLLs sind dann Funktionsbibliotheken deines Projektes und keine Wrapper.

Verfasst: 04.01.2009 15:40
von Burstnibbler
Gimbly hat geschrieben:In diesem Zusammenhang würde mich interessieren, wie man herausfinden kann, welche DirectX-Version beim User installiert ist...
Nicht zu empfehlen :mrgreen: :
http://msdn.microsoft.com/en-us/library ... S.85).aspx

Aber es geht über die Registry:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Directx
Dort findet man dann Schlüssel für Version und Build-Nummer.

Verfasst: 08.01.2009 12:26
von Thorium
Burstnibbler hat geschrieben: Aber es geht über die Registry:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Directx
Dort findet man dann Schlüssel für Version und Build-Nummer.
Auch nicht zu empfehlen.
Ort und Format der Version haben sich mehrfach geändert und werden das vieleicht auch noch tun. Das heisst, wenn dein Spiel die Version prüft, wird es vieleicht zukünftige Versionen nicht erkennen. Es gibt ein paar alte Spiele, die deswegen den Dienst versagen, sehr ärgerlich.

Einfach Initialisieren und prüfen obs erfolgreich war. Alles andere is Käse.