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

Aktuelle Zeit: Sa Jul 12, 2025 21:11

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: OpenGL 3.3 & Shared Context
BeitragVerfasst: Fr Nov 23, 2012 10:33 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Guten Tag zusammen,
Hat schon jemand von Euch in MsWindows7 versucht, zwei OpenGL 3.3 Render-Contexts zu "sharen" ('tschuldigung für das Denglisch) und funktioniert das?

Ich bin nämlich hier auf Ubuntu 12.04 und hier geht das definitiv >>nicht<<. Wenn es auf Windows7 geht, verlege ich meine Testplattform dorthin.

Vielen Dank im Voraus für eine Antwort
Traude


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: OpenGL 3.3 & Shared Context
BeitragVerfasst: Fr Nov 23, 2012 10:41 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Bei GLX gibts da eine Einschränkung, du musst das Sharen einstellen bevor der Kontext zum ersten mal aktiv war.

grüße

_________________
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: Re: OpenGL 3.3 & Shared Context
BeitragVerfasst: Fr Nov 23, 2012 10:56 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Na, das weiß ich doch. Ich bin schon seit 2008 auf Ubuntu und dazwischen ungefähr ein Jahr auf Debian. In dieser Zeit hat das Sharen immer funktioniert, aber eben mit OpenGL 2.1.

Nur jetzt, auf OpenGL 3.3 funktioniert es eben nicht mehr. Ich bin grade beim Testen der PasGUI, und die hat einen Context pro Fenster. Ich habe per Debugger keine Fehler gefunden, OpenGL spuckt auch keine Fehler aus. Das Erzeugen des Rendering Context funktioniert gut; beim ersten Kontext-Create steht bei "Shared Context" ein NIL-Pointer, beim zweiten bringe ich meinen ersten Kontext mit und kriege einen gültigen zweiten Kontext. Beim Erzeugen des Kontext gibt es keine Auffäligkeiten.

Nur die Fenster sind teilweise "entkleided".

Daraus habe ich geschlossen, dass das Sharing nicht korrekt arbeitet. Das Zeichnen mit einem einzigen Context funktioniert gut.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: OpenGL 3.3 & Shared Context
BeitragVerfasst: Fr Nov 23, 2012 14:40 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Benutzt du diese Erweiterung GLX_ARB_CREATE_CONTEXT, insbesondere die Funktion glXCreateContextAttribsARB? Sorry, wenn ich hier sinnlos Zeug frage, ich habe OpenGL 3 noch nicht angefasst, weiß als nicht wie gängig das ist. Funktioniert der Parameter share_context vielleicht?

grüße

_________________
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: Re: OpenGL 3.3 & Shared Context
BeitragVerfasst: Fr Nov 23, 2012 16:27 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Ja, genau die benutze ich. Bei mir sieht das so aus:

(bitte nicht erschrecken, es sieht nur deshalb so umständlich aus, weil ich grade beim Debuggen bin; durch die "unnötigen" Variablen kann ich die Dateninhalte besser kontrollieren).


Code:
  1. Function osRenderContext30Create(AWindow: TWindowID;
  2.                ASharedContext: TRenderContextID)
  3.                : TRenderContextID;
  4. Const
  5.    DO_DIRECT_RENDERING: BYTEBOOL = TRUE;
  6. Var
  7.    // Specify the Context attributes
  8.  
  9.    FBAttrib: Array[0..5] Of LongInt = (
  10.  
  11.       GLX_CONTEXT_MAJOR_VERSION_ARB, 3,
  12.       GLX_CONTEXT_MINOR_VERSION_ARB, 3,
  13.       0, 0
  14.       );
  15.  
  16.    LocalContextPtr,LocalSharedContextPtr: GLXContext;  // Pointer
  17.    LocalContextAsUInt: LongWord;
  18.    IsActive: LongBool;
  19. Begin
  20.    LocalSharedContextPtr:= GLXContext(ASharedContext);
  21.  
  22.    LocalContextPtr:= glxCreateContextAttribsARB(XDisplay,
  23.                      FBConfig,
  24.                      LocalSharedContextPtr,
  25.                      DO_DIRECT_RENDERING,
  26.                      @FBAttrib);
  27.  
  28.    // First map window, then activate Rendering context
  29.    osWindowDisplay(AWindow,TRUE);
  30.  
  31.    LocalContextAsUInt:= LongWord(LocalContextPtr);
  32.  
  33.    IsActive:= osRenderContextActivate(AWindow,LocalContextAsUInt);
  34.  
  35.    Result:= LocalContextAsUInt;
  36. End;
  37.  


Da fällt mir übrigens ein, dass ich doch etwas Auffälliges beim Debuggen bemerkt habe: nach dem Erzeugen des Context rufe ich die Prozedur osWindowDisplay auf. Die macht ein XMapWindow, das heißt sie zeichnet das Fenster, zumindest war das früher immer so. Ubuntu 12.04 macht das aber nicht, sondern wartet darauf, dass sich das Fenster selber zeichnet. Sie dürften intern irgendwas geändert haben.

Übrigens: Grüß Dich. :D


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: OpenGL 3.3 & Shared Context
BeitragVerfasst: Fr Nov 23, 2012 16:40 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Hm, ich fürchte, da bin ich raus. TAK? Anyone? Für mich sieht das gut aus, vorrausgesetzt der andere Shared Context war noch nicht aktiv (wobei ich mir da auch nicht sicher bin, wie strikt diese policy ist).

Grüße Zurück :D

_________________
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: Re: OpenGL 3.3 & Shared Context
BeitragVerfasst: Mi Nov 28, 2012 13:05 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Kleiner Nachtrag:
es handelt sich offensichtlich um meinen eigenen Fehler, nicht um einen Ubuntu-Fehler. Ich habe mein Programm mittlerweile auf Win7 getestet und dort habe ich das gleiche Problem. Es muss wohl mit den Änderungen von OpenGL2 auf Opengl3 zusammenhängen; ich habe im Internet gelesen, VAO's kann man nicht "sharen". :(
Traude


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: OpenGL 3.3 & Shared Context
BeitragVerfasst: Mi Nov 28, 2012 14:58 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Vertex Array Objects? Liegen die nicht im RAM?

grüße

_________________
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: Re: OpenGL 3.3 & Shared Context
BeitragVerfasst: Mi Nov 28, 2012 15:45 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
VAOs liegen im RAM und im GRAM, es kann gar nicht anders sein, denn zum Zeichnen sagst Du nur: "glBindVertexArray(xy)". Da wird kein Buffer mehr angegeben, auch kein VertexAttribPointer mehr, garnichts.

Aber VAO's sind kontextabhängig (ich habe gerade in der VAO-Spezifikation nachgesehen).

Zeichenobjekte, die nur einen (dynamischen) Puffer besitzen (z.B der Font-Manager oder das Objekt, das für Linien zuständig ist) müssen ab OpenGL 3 berücksichtigen, in welchem Kontext gerade gezeichnet wird. Das heißt: schon wieder eine Umorganisation nötig. Das macht den Code komplizierter, weil die ganze Engine Kontext-bewusst werden muss. Gerade das hätte das Context-Sharing verhindern sollen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: OpenGL 3.3 & Shared Context
BeitragVerfasst: Mi Nov 28, 2012 17:56 
Offline
DGL Member

Registriert: Sa Mär 31, 2012 23:14
Beiträge: 26
Programmiersprache: PASCAL
Also das VAO selbst sollte nicht im VRAM liegen (würd mich zumindest wundern). Die Bufferbindings und glVertexAttribPointer-Aufrufe sind ein Teil das VAO-states, die mit glBindVertexArray() vom Treiber zurechtgerückt werden (das ist ja auch der Sinn von VAO, das Zusammenfassen dieser ganzen Befehle). Die Buffer sind im Normalfall im VRAM, vllt. blockiert das das Sharen der Vertexarrays...

_________________
The force, strong it is in OpenGL.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: OpenGL 3.3 & Shared Context
BeitragVerfasst: Mi Nov 28, 2012 19:28 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
breakdancingYoda hat geschrieben:
Also das VAO selbst sollte nicht im VRAM liegen (würd mich zumindest wundern). Die Bufferbindings und glVertexAttribPointer-Aufrufe sind ein Teil das VAO-states, die mit glBindVertexArray() vom Treiber zurechtgerückt werden (das ist ja auch der Sinn von VAO, das Zusammenfassen dieser ganzen Befehle).
Du hast es professioneller ausgedrückt als ich, aber gemeint habe ich schon das Gleiche wie Du. :wink:

breakdancingYoda hat geschrieben:
Die Buffer sind im Normalfall im VRAM, vllt. blockiert das das Sharen der Vertexarrays...
Nein. Es steht in den Spezifikationen so drin: http://www.opengl.org/registry/specs/AR ... object.txt, siehe unter "Overview", Ende 2.Absatz. Warum sie sich das in die Spezifikationen hineingeschrieben haben, weiß ich nicht. Für mich ist es eine zusätzliche Komplikation und auch eine böse Überraschung.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 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:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 15 Queries | GZIP : On ]