hi,
wie kann ich herausfinden ob OpenGL zur verfügung steht. Also ich meine ohne jetzt das ganze zu starten. Falls das wirklich nicht klar genug war dann kurz der verwendungszweg: will engine machn wo direct3d und ogl zur verfügungn stehen solln. und am anfang soll die engine checken ob ogl (und auch direct3d) zur verfügung stehen.
falls dieses thema schon mal angesprochen wurde, dann verweisst mich einfach auf den thread ... bin bisl verpeilt und weiss echt nicht welche suchbegriffe ich benutzen soll.
thx im vorraus
EDIT: Achso wollte noch sagn das ich dgl header benutze
Registriert: Do Mai 13, 2004 16:36 Beiträge: 116 Wohnort: Deutsch-Wagram (Österreich)
Bei Windows ist automatisch OpenGL (1.0) dabei.
Das ist ein Software-Renderer von Microsoft.
Außerdem, wenn GL nicht verfügbar ist, dann gibt der dgl-Header eine Fehlermeldung aus.
_________________ Diese Signatur ist defekt. Bitte wählen Sie die Numer 12846712894671893230917497617383216 (gültig ab 32.13.2671)
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
OpenGL wie gewohnt initialisieren und mit glGet(GL_VENDOR) prüfen von wem der OpenGL-Renderer ist. Wenn da als Ergebnis Microsoft rauskommt, dann verfügt der Rechner über keine Hardwarebeschleunigung.
hmm... also dass der header ne fehlermeldung abgibt würde ich ja gerne verhindern.
Und ich will das ja herrausfinden bevor ich irgentwas initialisiert hab. Also ich versuch einfach ma das glGet(vendor) ohne initialisierung (wenns nich geht dann mach ich mir halt nen unit der standart OpenGL uset).
also ich weiss das es doof ist das hier zu fragen aber vielleicht kann mir ja trotzdem einer schnell helfen. Wie sieht das bei D3D aus. ich benutze jedi header und version 9. ich weiss dass wenn man kein d3d9 auf seinem pc installed hat, eine fehlermeldung kommt dass die dll nicht gefunden wurde. da das ja sehr unschön ist, wäre es doch super einen weg zu haben diese meldung zu umgehen.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Du kannst kein glGet benutzen ohne OpenGL initialisiert zu haben. Der Header funktioniert aber auf jedem System, denn seit Win95 gibts ja die OpenGL32.dll von Windows.
ich kann Dir für die DirectX Abfrage höchsten die C++ Function nennen, da ich mit DirectX nur in C++ gearbeitet habe. Am besten besorgst Du Dir für Dein Vorhaben das DirectX 9 SDK von MS, denn die Doku ist echt edel und unverzichtbar .
Also die C++ Function lautet :
Code:
GetDXVersion( DWORD* pdwDirectXVersion, TCHAR* strDirectXVersion, int cchDirectXVersion )
Details findest Du wie gesagt in der SDK Doku.
Die Versionsnummern sind folgende :
Code:
pdwDirectXVersion - This can be NULL. If non-NULL, the return value is:
0x00000000 = No DirectX installed
0x00010000 = DirectX 1.0 installed
0x00020000 = DirectX 2.0 installed
0x00030000 = DirectX 3.0 installed
0x00030001 = DirectX 3.0a installed
0x00050000 = DirectX 5.0 installed
0x00060000 = DirectX 6.0 installed
0x00060100 = DirectX 6.1 installed
0x00060101 = DirectX 6.1a installed
0x00070000 = DirectX 7.0 installed
0x00070001 = DirectX 7.0a installed
0x00080000 = DirectX 8.0 installed
0x00080100 = DirectX 8.1 installed
0x00080101 = DirectX 8.1a installed
0x00080102 = DirectX 8.1b installed
0x00080200 = DirectX 8.2 installed
0x00090000 = DirectX 9.0 installed
_________________ Gruß Sascha [SM3D Game Development]
In beiden Fällen bleibt dir - so du dich nicht auf den Lademechanismus des jeweiligen Loaders (etwa dglOpenGL für OpenGL, oder die JEDI DX Bibliotheken für DirectX - bzw. die entsprechenden Äquivalente in C++ oder irgend einer anderen Programmiersprache) verlassen willst - nur übrig, im Vorhinein die Existenz der jeweiligen DLLs zu überprüfen.
Für OpenGL wäre dies, wie SoS bereits erwähnte, OpenGL32.dll (evtl. gemeinsam mit GLU32.dll, wenn GLU verwendet werd), für DirectX sind dies ein Sammelsurium diverser DLLs (etwa DSound.dll für DirectSound).
"Die" Existenz von OpenGL zu überprüfen ist nur bedingt sinnvoll - OpenGL32 ist seit Windows 95 mit USB Unterstützung im Betriebssystem integriert - auch in Longhorn wird es, sogar in einer etwas aktuelleren Grundkonfiguration, dabei sein, wobei es natürlich immer noch den Grafikkartenherstellern obliegt, schnelle und "moderne" Treiber zur Verfügung zu stellen. Immerhin wird sogar Microsofts Implementation nicht mehr auf einem Softwarerenderer basieren, sondern auf Direct3D - und OpenGL 1.2 Funktionalität zur Verfügung stellen (die aktuelle Implementierung basiert übrigens auf OpenGL 1.1).
Da dich aber niemand zwingt, Microsofts Mechanismus zu nutzen, und OpenGL ohnehin betriebssystemunabhängig ist, steht es dir durchaus frei, auch andere Treiber (etwa Mesa oder GLDirect) zu nutzen, deren DLLs dann halt anders heißen. dglOpenGL unterstützt übrigens beliebige OpenGL DLLs, wodurch es recht einfach ist, eine Anwendung etwa mit Mesa laufen zu lassen.
Falls das wirklich nicht klar genug war dann kurz der verwendungszweg: will engine machn wo direct3d und ogl zur verfügungn stehen solln. und am anfang soll die engine checken ob ogl (und auch direct3d) zur verfügung stehen.
Das ist doppelte Arbeit die sich nicht unbedingt lohnt, da die Karten die für Spiele taugen sowieso beides gut unterstützen. Wenn du nicht gerade Cg verwenden willst, mußt du dann z.B. auch alle Shader zweimal schreiben. UT2004 hat zwar auch mehrere Treiber aber nur der D3D Modus läuft richtig gut. Bei D3D muß man auch auf andere Dinge bei der Optimierung achten usw..
Ich nutze das Thema wenn gestattet gleich mal um meine Log.dll zu testen, dazu hier mal ein kleines Tool von mir mit meiner Log.dll , wäre super wenn die jenigen von Euch die Lust dazu haben es einmal testen könnten und mir die Log dann mailt.
Kurze Erklärung, es passiert nachdem Start eigentlich nichts, bis auf das ein Fullscreen Fenster erstellt wird, die OpenGL Infos ausgelesen werden und diese dann in eine Log Datei geschrieben werden. Für diese Log Datei wird ein Ordner Namens Logs im selben Verzeichnis der EXE erstellt. Nachdem der schwarze Screen zu sehen ist, könnt Ihr das Tool mit ESC beenden.
SORRY war tatsächlich der Fall, *g*, naja dafür hast Du jetzt wenigstens die gleich die API dazu *g*, die war nemlich statt der Log.dll mit ins Archive geraten. OK ich hab jetzt den Fehler behoben und die DLL mit reingepackt, habe EXE und DLL noch mal mit UPX gepresst, sonst hätte ich sie nicht hochladen könen (war über das limt von 256). Habs gestestet läuft trotzdem ohne Probs. UND THX schon im vorraus.
_________________ Gruß Sascha [SM3D Game Development]
Registriert: Do Nov 20, 2003 19:52 Beiträge: 48 Wohnort: Tillingen bei Chemnitz
Thema Verwirrung: In dem neuen Download ist tatsächlich die Log.dll dabei, aber das Programm dazu ist das 'Log.dll Test Programm'. Außerdem meint mein WinRAR, daß der 'Kopf' der Verzeichnisse fehlerhalft sei, entpacken konnt ich's trotzdem ohne Probleme.
Hab ma zu dem ersten Download, der das richtige Programm enthielt (OGL_LogTest.exe) die Log.dll kopiert, das funktioniert dann, es erstellt dann den Ordner 'Logs', und dort eine Log-Datei, die die GL-Infos enthält.
_________________ ...die Idee ist gut, doch die Welt noch nicht bereit...
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
@SM3D und DopeFish : Bitte On-Topic bleiben. Die Log-Sache hat mit der Frage des Threaderstellers nichts mehr zu tun, und Threads zu Hijacken ist keine tolle Geste. Bitte also nur posten wenns was zum Thema ist, und ansonsten neuen Thread aufmachen.
Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.