Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Es ist mal wieder so weit. Es gibt wieder eine neue Version des Headers. Die Änderungen betreffen in erster Linie OpenGL 3.0 aber auch ein paar Anregungen aus der Community.
Liste mit Änderungen an der dglOpenGL
Anpassungen an den Konstanten von GL_EXT_texture_shared_exponent
Möglicherweise eine bessere Unterstützung für Mac
Mithilfe des Defines DGL_TINY_HEADER ist es möglich das automatische Laden von Funktionspointer bzw das überprüfen der Erweiterungen zu deaktivieren. Nähere Details zu deren Benutzung sind im Header zu finden.
OpenGL in der Kernversion 3.0 implementiert
Neue Erweiterungen
GL_ARB_depth_buffer_float
GL_ARB_draw_instanced
GL_ARB_framebuffer_object
GL_ARB_framebuffer_sRGB
GL_ARB_geometry_shader4
GL_ARB_half_float_vertex
GL_ARB_instanced_arrays
GL_ARB_map_buffer_range
GL_ARB_texture_buffer_object
GL_ARB_texture_compression_rgtc
GL_ARB_texture_rg
GL_ARB_vertex_array_object
GL_NV_conditional_render
GL_NV_present_video
GL_EXT_transform_feedback
GL_EXT_direct_state_access
GL_EXT_vertex_array_bgra
GL_EXT_texture_swizzle
GL_NV_explicit_multisample
GL_NV_transform_feedback2
WGL_ARB_create_context
WGL_NV_present_video
WGL_NV_video_out
WGL_NV_swap_group
WGL_NV_gpu_affinity
Um einen reinen OpenGL 3.0 Kontext benutzen zu können muss man allerdings selber ein bisschen Hand anlegen. Dazu existiert die Erweiterung WGL_ARB_create_context. Der Header versucht also nicht selbsttätig einen reinen OpenGL 3.0 Kontext zu erstellen. Unter Linux gibt es aktuell noch keine Möglichkeit einen 3.0 Kontext zu erstellen. Ich hatte zwar vor ein paar Tagen eine entsprechende Erweiterung gefunden. Diese wurde aber noch nicht in den Header übernommen. Was wohl auch nicht ganz so einfach werden dürfte.
Der Downloadlink ist wie üblich im passenden Wiki Artikel zu finden.
Zuletzt geändert von Lossy eX am Sa Jan 03, 2009 16:24, insgesamt 1-mal geändert.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Hmm... Jetzt noch eine Grafikkarte, die das mitmacht... *träum*
Gruß Lord Horazont
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Habe eben noch eine Unstimmigkeit mit FPC entdeckt und behoben. Alle die FPC benutzen und sich schon eine Version gezogen haben sollten das also noch mal tun.
If the context is successfully created you should get 3.0 on NVIDIA 181.00 (8000 series and GTX 200) for GL_VERSION and 1.30 for GL_SHADING_LANGUAGE_VERSION
I did it myself and everything works fine (on NVIDIA)!!!
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Für FreePascal kann man da den Typ ptruint nehmen, der passt sich immer der größe von Pointern an.
Gruß Lord Horazont
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
64Bit: Wie wäre es, wenn man an der Stelle einfach nur "Pointer" nimmt? Das ist immer so groß wie ein Pointer. Das würde aber bedeuten man könnte die unit windows nicht benutzen. Was dann beim Erstellen des Kontextes witzig werden dürfe. Aber 64 Bit ist sowieso so eine Sache. Das wurde nie wirklich unterstützt. Allerdings stimme ich zu. Da sollte eine Unterstützung her.
SSL: Yes. You are right. The declaration of wglCreateContextAttribsARB is wrong. I have fixed it. Thanks.
To create an opengl 3.0 context i found an intresting article on the news from opengl.org. In this article they load wglCreateContextAttribsARB directly with wglGetProcAddress. This is what happen if you call ActivateRenderingContext. But ActivateRenderingContext only works if you have an real RC. But you are able to load the functions by yourself. All you have to do is to call Read_WGL_ARB_create_context. So i think it should work if you do it following way. No guarantee. I dont have 3.0 drivers yet (AMD).
Code:
InitOpenGL;
Read_WGL_ARB_create_context;
ifAddr(wglCreateContextAttribsARB)=nilthen
raise Exception.Create('opengl 3.0 not supported');
So you can avoid to create an temp RC. My previous informations was you have to get an active RC to call wglGetProcAddress. But this seems to be incorrect. In the article it's seems to work.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Kompilerdirektiven? Da muss doch was für 64Bit da sein, oder? Bei FPC ist das CPU32 und CPU64 für die jeweilige Architektur? Wie macht Delphi das? Gibts da überhaupt eine Version mit 64 Bit? Wenn nein, wäre doch ein solches Konstrukt eine Lösung:
Code:
{$ifdef FPC}
THandle= ptruint;
{$else}
THandle=Cardinal;
{$endif}
Gruß Lord Horazont
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Das ändert aber nichts daran, dass LoadLibrary einen Integer zurück liefert. Und dann hab ich wie jetzt auch das Problem, dass das Eine ein Pointertyp ist und das Andere nicht. Dann heißen die Typen etwas anders aber das Problem ist trotzdem das Gleiche. Aber das sind nur kleine Details. Da würde ich mir jetzt nicht zu viele Gedanken machen.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Hmm... Integer (32bit) lässt sich ja ohne weiteres auf 64 erweitern. Nur das zusammenschrumpfen eines 64 wertes auf 32 ist halt nicht empfehlenswert. Und wenn du den Int64, den du aus dem Int32 gewonnen hast wieder zu einem Int32 machst, sollte das ja auch keinen Verlust geben, oder?
Gruß Lord Horazont
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Registriert: Do Jun 28, 2007 17:58 Beiträge: 193
Programmiersprache: Pascal, C
Also mit der oben von mir geschriebenen Änderung, scheint der Header ohne Probleme auf 64-Bit Linux zu laufen. LoadLibrary (dlopen) gibt auf einem 64-Bitsystem schon einen 64-Bit Wert zurück. Nur das Casten nach THandle hat diesen Wert zerstört.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Das ist aber nicht alles was bei 64 Bit nicht funktioniert. Die Definitionen der Methoden sind als stdcall definiert sobald das define win32 aktiv ist. Unter windows 64 bit heißt das aber wohl Win64. Das hatte mir zu mindest Rüdiger bestätigt, der vor ein paar Tagen Probleme damit hatte. Aktuell würde die Methoden unter Windows mit cdecl aufgerufen werden. Das würde ein sehr kurzer Spaß werden.
Und ehrlich gesagt tue ich mich schwer damit einfach so THandle neu zu definieren. Das kann nur als hotfix in Frage kommen aber nicht wenn es darum geht es sauber zu machen. Und dazu hat mir bisher die Zeit gefehlt. Ich werde mir das aber am Wochenende mal genau anschauen.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Wegen stdcall: Gibts nicht einen Switch WINDOWS anstatt WIN32? ansonsten im Header selber definieren und nen Search&Replace für WIN32 drüber laufen lassen.
Code:
{$ifdef WIN32}
{$define WINDOWS}
{$elseif WIN64}
{$define WINDOWS}
{$endif}
(oder so...)
Gruß Lord Horazont
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Mitglieder in diesem Forum: 0 Mitglieder und 57 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.