Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Mär 29, 2024 02:45

Foren-Übersicht » DGL » News
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 17 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: [OPENGL] OpenGL Header Version 3.0
BeitragVerfasst: Sa Jan 03, 2009 14:18 
Offline
DGL Member
Benutzeravatar

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.

Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Jan 03, 2009 16:18 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jul 20, 2006 17:34
Beiträge: 52
Lossy eX hat geschrieben:
Unter Linux gibt es aktuell noch Möglichkeit einen 3.0 Kontext zu erstellen.

Irgendwie ist der Satz unverständlich, kann es sein dass da ein Wort fehlt? :?

_________________
2+2=5
For extremely large values of two


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Jan 03, 2009 16:27 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Wilson hat geschrieben:
Lossy eX hat geschrieben:
Unter Linux gibt es aktuell noch Möglichkeit einen 3.0 Kontext zu erstellen.

Irgendwie ist der Satz unverständlich, kann es sein dass da ein Wort fehlt? :?

Stimmt. Dort fehlt ein nicht. Habe das mal nachgetragen. ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jan 03, 2009 16:52 
Offline
DGL Member
Benutzeravatar

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 networkmy 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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jan 03, 2009 19:07 
Offline
DGL Member
Benutzeravatar

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. ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 08, 2009 13:39 
Offline
DGL Member

Registriert: Do Jan 08, 2009 13:06
Beiträge: 1
I have found an error in WGL_ARB_create_context extension declaration.

wglCreateContextAttribsARB is a function and not a procedure!! It returns rendering context variable of HGLRC type.

This function equals to standard glCreateContext and have to be called to create rendering context for OpenGL 3.0 application.

But there is a bad thing!!! You cannot call this function until standard rendering context is created? So you will have to do something like that:

Var
attribList: array[0..5] of GLint;

attribList[0]:= WGL_CONTEXT_MAJOR_VERSION_ARB;
attribList[1]:= 3;
attribList[2]:= WGL_CONTEXT_MINOR_VERSION_ARB;
attribList[3]:= 0;
attribList[4]:= 0;
attribList[5]:= 0;

InitOpenGL;
DC := GetDC (Form1.Handle);
HRC := CreateRenderingContext(DC, [opDoubleBuffered], 32, 24, 8, 64, 2, 0);
ActivateRenderingContext(DC, HRC, True);
DeactivateRenderingContext;
HRC:= wglCreateContextAttribsARB(DC, 0, @attribList);
ActivateRenderingContext(DC, HRC, True);

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)!!!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 08, 2009 16:40 
Offline
DGL Member

Registriert: Do Jun 28, 2007 17:58
Beiträge: 193
Programmiersprache: Pascal, C
Anwender von Andorra 2D haben einen Problem mit der dglOpenGL.pas und 64-Bit Systemen:

DlOpen gibt einen 64-Bit Wert zurück. THandle ist aber 32-Bit.
Code:
  1.  
  2. function LoadLibrary(Name: PChar): THandle;
  3. begin
  4.   Result := THandle(dlopen(Name, RTLD_LAZY)); //Zerstört die Adresse
  5. end;
  6.  


Unter 64-Bit Systemen muss THandle folgendermaßen definiert werden:
Code:
  1.  
  2. type
  3.   THandle = int64;
  4.  


Vergleiche:
http://sourceforge.net/forum/forum.php? ... _id=633393

_________________
http://audorra.sourceforge.net//http://andorra.sourceforge.net


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 08, 2009 17:06 
Offline
DGL Member
Benutzeravatar

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 networkmy 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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 08, 2009 18:40 
Offline
DGL Member
Benutzeravatar

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:
  1. InitOpenGL;
  2. Read_WGL_ARB_create_context;
  3. if Addr(wglCreateContextAttribsARB) = nil then
  4.   raise Exception.Create('opengl 3.0 not supported');
  5.  
  6. DC := GetDC(Form1.Handle);
  7. HRC:= wglCreateContextAttribsARB(DC, 0, @attribList)
  8. ActivateRenderingContext(DC, HRC, True);


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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 08, 2009 20:21 
Offline
DGL Member
Benutzeravatar

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:
  1.  
  2. {$ifdef FPC}
  3.   THandle = ptruint;
  4. {$else}
  5.   THandle = Cardinal;
  6. {$endif}
  7.  


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 networkmy 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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 08, 2009 22:28 
Offline
DGL Member
Benutzeravatar

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. ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 09, 2009 13:57 
Offline
DGL Member
Benutzeravatar

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 networkmy 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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 09, 2009 17:40 
Offline
DGL Member

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.

_________________
http://audorra.sourceforge.net//http://andorra.sourceforge.net


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 09, 2009 19:26 
Offline
DGL Member
Benutzeravatar

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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jan 10, 2009 12:06 
Offline
DGL Member
Benutzeravatar

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:
  1.  
  2. {$ifdef WIN32}
  3. {$define WINDOWS}
  4. {$elseif WIN64}
  5. {$define WINDOWS}
  6. {$endif}
  7.  

(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 networkmy 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


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 17 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Foren-Übersicht » DGL » News


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 33 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.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.174s | 17 Queries | GZIP : On ]