Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Heiko

Frischling

  • »Heiko« ist der Autor dieses Themas

Beiträge: 19

Wohnort: @home

  • Private Nachricht senden

1

02.02.2014, 13:46

Header für opengl32.dll gesucht, und allg. Frage zu opengl-extensions.

Hallo erstmal.
Zuerst einmal habe ich eine grundlegende Frage.
Gibt es irgendwo header für die besagte opengl32.dll?
Desweiteren habe ich im windows kits geschaut wo eine gl.h und glu.h liegen.Soweit sogut.Aber die nützen mir nichts, da dort als version bei gl.h die version 1_1 steht.
Gibt es irgendwo aktuelle Header?Bzw. würde ich gern ab Version 3 nutzen wollen, oder auch 2.

Wie steht es eigentlich damit, wenn ich funktionen nutzen will die bei einer vorhergehenden version nicht verfügbar waren?
Bei dx updatet man und gut ist.

Ums kurz zu machen, ich möchte die opengl32.dll in einer anderen programmiersprache verwenden, die keine libs einbinden kann.
Und würde dann deren funktionen für eigene projekte verwenden.
btw.: reicht da die opengl32.dll aus?

Wäre super wenn mir da jemand helfen könnte.

2

02.02.2014, 13:56

Was Du suchst, ist GLEW.

Header und Sources in Dein Projekt einfügen und weiter anhand der Dokumentation. Den nötigen Kontext musst Du aber weiterhin selbst erzeugen.

Zitat

Ich bin nicht der Messias.
Ich sage, du bist es, Herr. Und ich muss es wissen, denn ich bin schon einigen gefolgt.

https://bitbucket.org/bwbg

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

3

02.02.2014, 13:56

OpenGL ist im Grafiktreiber verankert. Heißt bei wirklich alten Grafikkarten kann es natürlich passieren dass deine OpenGL Version nicht mehr unterstützt wird.
Aber das kann dir auch bei DX passieren, ich glaube 11 ist nur bis 7 kompatibel?
Dann OpenGL Extensions: einfach nicht mehr nutzen. Ist dank Shadern und Version 3 und 4 auch eigentlich nicht mehr nötig (zumindest fällt mir kein Grund ein).

Heiko

Frischling

  • »Heiko« ist der Autor dieses Themas

Beiträge: 19

Wohnort: @home

  • Private Nachricht senden

4

02.02.2014, 14:04

Wie ich bereits im ersten Post erwähnte, möchte ich die opengl32.dll wrappen.
Weil ich diese mit einer Programmiersprache nutzen möchte welche keine libs einbinden kann.

Aber danke für die information und ich hab mich inzwischen belesen ab opengl 3.3 sollte es sein.
Oder gern auch die 4.

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

5

02.02.2014, 14:17

OpenGL Extensions sind nach wie vor ein sehr wichtiges Werkzeug.
Zum Einen kann man damit teilweise die Performance oder die Kompatiblität steigern und zum Anderen können einige auch die Grafikqualität verbessern. (Zb. der anisotrope Texturfilter)
Viele richtig interessante Features sind immer erst als Extension verfügbar.

Welche Programmiersprache ist es denn?

6

02.02.2014, 15:32

Nun ja, ich glaube so ein einfaches wrappen ganz ohne GLEW und co. dürfte sich als komplizierter herausstellen als zuerst gedacht. Du musst nämlich wissen, dass es schlichtweg keinen Header mit allen OpenGL-Funktionen gibt. Die benötigten Funktionen werden erst zur Laufzeit als Funktionszeiger durch platformspezifische Befehle aus Library geholt, und können erst im Nachhinein verwendet werden. Dies dient der Erweiterung der OpenGL-Funktionalität (vgl. http://www.opengl.org/wiki/Load_OpenGL_Functions). Du solltest daher eher einen Wrapper um glew, oder andere, wie etwa gl3w bauen.

Wenn du das ganze nun für eine Programmiersprache machen möchtest, die keine Libs einbinden kann, hast du ein Problem. Deine Funktionszeiger werden ja erst zur Laufzeit aus der Bibliothek geladen. Daher kannst du höchstens eine native Bibliothek, die die Funktionszeiger lädt wrappen. Im Endeffekt benötigen auch LWJGL, oder JOGL die native OpenGL32.lib / .dll, bzw. deren Linux / MacOS - Gegenstück.

Liebe Grüße,
~ EuadeLuxe ~

PS.: Sollte ich etwas falsch erklärt haben, korrigiert mich bitte.

Heiko

Frischling

  • »Heiko« ist der Autor dieses Themas

Beiträge: 19

Wohnort: @home

  • Private Nachricht senden

7

02.02.2014, 15:36

Also ich bin einen schritt weiter...an informationen.
es werden über 300 funktionen aus der dll exportiert.
der zugriff darauf ist kein problem.

und was die extensions betrifft, stecken die in der dll drin und müssen mittels wglGetProcAddress geholt werden zur laufzeit?
soll heißen ich habe mir die exporte meiner opengl32.dll angesehen und z.b. shaderfunktionen gibt es da keine.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

8

02.02.2014, 16:56

Die Adressen für solche Funktionen wie die für Shader sind nicht generell verfügbar und daher auch nicht exportiert. Sie können nach der Erzeugung eines entsprechenden Kontextes (also mit einer Version, die diese Funktionen anbietet) per wglGetProcAddress geholt werden.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

9

02.02.2014, 17:28

Mich würde auch schwer interessieren, welche Sprache es dem Programmierer so schwer macht ;)

Zitat

Ich bin nicht der Messias.
Ich sage, du bist es, Herr. Und ich muss es wissen, denn ich bin schon einigen gefolgt.

https://bitbucket.org/bwbg

10

02.02.2014, 18:27

Allerdings wird das ganze nochmal erschwert, da die Funktion zum Laden der Funktionszeiger auf jedem Betriebssystem anders sein kann, wenn nicht sogar ist. Siehe Windows (wglGetProcAddress) gegen Linux mit X-Windows (glXGetProcAddress). Ein einzelner Header ist daher nicht möglich.

Soweit ich weiß, enthält die OpenGL32.dll auf Windows auch nur Legacy-Funktionen von OGL 1.1. Die neueren Versionen kommen ja mit dem Grafiktreiber, und damit liegen die neueren Funktionen ja auch in selbigem, und nicht in der OpenGL32.dll. Das Problem mit der OpenGL32.dll liegt eigentlich nur darin, dass Microsoft darauf besteht, Version 1.1 selbst zur Verfügung zu stellen, allerdings fordert, dass alle neueren Funktionen vom Grafikkartenhersteller bereitgestellt werden.

#EDIT: Nun gut, er mag möglich sein, wenn er eine Funktion enthält, die die Zeiger zur Laufzeit initialisiert, d.h. nach Erstellung des OS-spezifischen Kontextes, s. glewInit(). Aber dann sind die Funktionen dennoch nicht direkt verfügbar.

Werbeanzeige