Änderungen: 1) Die Warnungen wurden korrigiert. (20.04.05)
2) $IF und $ALIGN Compiler Befehler wurden an Delphi <6 angepaßt. (20.04.05 23:00)
3) Wrapper Funktionen werden ab Delphi 2005 mittels inline direkt eingefügt (21.04.05 00:15)
4) Funktioniert auch wieder mit FP und Linux
5) CreateShaderObjectARB korrigiert (01.05.05)
Der DGL Header unterstützt jetzt auch .Net 1.1 . Dafür waren eine Menge Änderungen notwendig und deshalb handelt es sich um eine Beta Version. Fehler bitte hier posten, damit sie korrigiert werden können.
Ich bitte den Header auch unter Win32 und insbesondere unter Linux zu testen, damit sichergestellt werden kann, dass er auf diesen Plattformen auch noch funktioniert.
Beim Header und insbesondere beim Laden der Extensions hat sich einiges geändert.
1) InitOpenGL braucht nicht immer aufgerufen zu werden. CreateRenderingContext ruft jetzt automatisch InitOpenGL auf, so daß es keinen Fehler mehr gibt, falls man dies vergessen hat.
2) ActivateRenderingContext hat jetzt einen zweiten default Parameter, der standardmäßig auf true steht und angibt, ob alle Funktionen geladen werden sollen. Unter .Net dauert das Laden aller Extensions mehrere Sekunden und daher stellt man ihn dann besser auf false. Die Punkte 3) und 4) betreffen nur diesen Fall.
3) Alle Extensions haben jetzt eine extra Read_ExtensionName Funktion mit der die Extensions einzeln geladen werden können, falls man sie nicht alle beim Start lädt.
4) Es gibt für jede Funktion außer denen, die schon in InitOpenGL geladen werden, einen speziellen Stub, der die Funktion beim ersten Aufruf lädt. Falls man also ActivateRenderingContext mit false benutzt und die Extension nicht einzeln lädt, wird die Funktion beim ersten Aufruf initialisiert. Dies ist der empfohlene Weg unter .Net.
Code:
glCreateRenderingContext(...)
glActivateRenderingContext(...,false)
Der Rest funktioniert automatisch und falls die Funktion vorhanden ist, gibt es auch bei nicht initialisierten Zeigern jetzt keine Exception mehr.
5) Unter .Net gibt es ja keine Zeiger in dem Sinne wie gewohnt und deshalb ändern sich einige Parameter. Die meisten Zeiger wurden in Arrays umgesetzt. So erwartet glVertex3fv jetzt ein Array von 3 oder mehr Single Variablen.
Für kompliziertere Fällen wurden spezielle Wrapper Funktionen eingeführt. So akzeptiert glTexImage2D jetzt direkt ein System.Drawing.Bitmap, einen Stream oder einen String mit einem Dateinamen. In den beiden letzten Fällen können so ohne viel Aufwand bmp,jpg,tif,gif und png Dateien geladen werden.
glReadPixels gibt übrigens auf Wunsch direkt ein Bitmap zurück.
Hab mir den Header und das Template mal angesehn und muss sagen dass das sehr gut aussieht. Mir gefällt vor allem das der Init-Code so stark verkürzt wurde. Mir fehlen leider (noch) die OpenGL-Kenntnisse um den Header voll auszunutzen, er sieht aber recht bugfrei aus (Delphi spuckt nur ein paar Warnungen aus, aber ich denke das das bei dir auch der Fall sein wird).
Und mir gefällt er bisher, Probiere ihn Morgen mal aus!
_________________ Shareholder und Leitender Entwickler bei Pipedream-Games.
Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.
Registriert: Do Jun 19, 2003 10:44 Beiträge: 991 Wohnort: Karlsfeld (nahe München)
So ich habe die DGLOpenGL an Delphi 5 angepasst. Die einzigste wirkliche Änderung bestand in der Ersetzung von $A4 durch $A+. Da Delphi 5 $A4 noch nicht kennt.
Ansonsten habe ich einfach die {$IF ..} Blöcke durch ein Eqivalent von {$IFDEF ..} Blöcken ersetzt.
MfG
Flo
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
_________________ Danke an alle, die mir (und anderen) geholfen haben. So weit... ...so gut
Da hat sich das wohl überschnitten. Habe den Beitrag erst gesehen (und später nochmal editiert), nachdem ich die neue Version im ersten Post aktualisiert hatte, sonst hätte deine Version genommen. Das $A4 habe ich aber für Versionen ab Delphi 6 dringelassen. Ob es was ausmacht weiß ich nicht. Sicher ist sicher.
Die Wrapper werden jetzt mit inline deklariert, so daß der Funktionsaufruf eventuell ein wenig schneller ist, auch wenn es alles keine zeitkritischen Funktionen sind.
Noch ein weiterer Hinweis:
Wie schon oben beschrieben werden ja Zeiger unter .Net als Arrays angesehen. Das kann man gut ausnutzen, indem man sich für seine Vektor Klasse einen impliziten Operator deklariert, der den Vektor in ein Array konvertiert. Dann kann man z.B. bei glVertex3fv direkt seinen Vector angeben.
Wie kann ich OpenGL Initialisieren in .net ohne WinForms oder die VCL zu benutzen?
Grund dafür ist die Grundstruktur die mein Programm hat und die ich sehr ungerne zunichte mache!
Edit: Nein! Die initialisierung aus dem Tut funzt nicht mehr!
_________________ Shareholder und Leitender Entwickler bei Pipedream-Games.
Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.
Warum soll diese Initialisierung nicht mehr funktionieren? Du mußt dann halt nur die entsprechenden Windows API Funktionen und Records selber deklarieren.
Warum soll diese Initialisierung nicht mehr funktionieren? Du mußt dann halt nur die entsprechenden Windows API Funktionen und Records selber deklarieren.
Die WinAPI wollte ich eigentlich nicht verwenden, naja dann muss wohl doch WinForms her!
_________________ Shareholder und Leitender Entwickler bei Pipedream-Games.
Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.
Der Header hat mittlerweile eine solche Größe erreicht. Das meiste sind die STUB's, die die entsprechende Funktion beim ersten Aufruf laden. Für .Net 1.1 notwendig, weil das gesamte Laden sonst zu lange dauern würde und beim Rest schadet es nicht.
Natürlich ist das alle nicht per Hand geschrieben, sondern generiert. Das betrifft sowohl die .Net Erweiterungen wie auch den normalen Header. Das wäre ja ansonsten auch eine extrem langweilige Arbeit.
Diese Version funktioniert noch nicht wieder mit Linux und FP, aber Phobeus hat das schon entsprechend angepaßt und wenn es dann bezüglich .Net/Win32 keine Korrekturen mehr gibt, wird das dann zusammengefaßt und als Version 1.9 offiziell veröffentlicht.
Mitglieder in diesem Forum: 0 Mitglieder und 14 Gäste
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.