DirectX und OpenGL in einem Programm

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Sven
Beiträge: 374
Registriert: 23.09.2004 12:01

DirectX und OpenGL in einem Programm

Beitrag 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.
Gimbly
Beiträge: 169
Registriert: 28.12.2005 14:26
Wohnort: NRW

Beitrag 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.
Gruß
Markus
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag 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
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Gimbly
Beiträge: 169
Registriert: 28.12.2005 14:26
Wohnort: NRW

Beitrag 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?
Gruß
Markus
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

InitSprite() sollte #False zurück geben und damit kann dein Spiel nicht
ausgeführt werden.

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag 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
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Burstnibbler
Beiträge: 58
Registriert: 04.10.2008 12:10

Beitrag 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.
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Beitrag 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.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Antworten