Du bist nicht angemeldet.

Werbeanzeige

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 096

Beruf: Student

  • Private Nachricht senden

1

08.09.2014, 20:33

OpenGL Context Sharing Chaos

Hi,
ich habe gerade ein Problem mit dem OpenGL Context Sharing ( mal wieder :pinch: )

Ich habe eben erfahren, dass die Vertex Array Objects (VAO) nicht zwischen den GL Contexts 'ge-shared' werden können (Referenz).
Jetzt habe ich versucht es auf die alte Methode zu machen: Immer wenn ein Vertex Buffer gebunden wird, wird das Vertex Format festgelegt, mittels "glVertexAttribPointer".
Das funktioniert aber nur mit einem GL Compatibility Profile, weil diese Funktionen in einem GL Core Profile nur noch mit einem VAO funktionieren und nicht mehr direkt mit den Vertex Buffer Objects (VBO).

Kann mir jemand sagen was ich machen soll?
Ich will eigentlich endlich mal komplett auf Core Profile umsteigen,
aber wie soll man jetzt am geschicktesten das Resource Sharing (vlt. eigenes Sharing Management) mit den VAOs in den Griff bekommen? ?(

Techie

Alter Hase

Beiträge: 723

Wohnort: Bayreuth

Beruf: Student | Hilfswissenschaftler in der Robotik

  • Private Nachricht senden

2

08.09.2014, 22:23

wglShareLists

Unter GLX musst du den anderen GL Context bei der Contexterstellung übergeben.

glXCreateContext

Schau dir den dritten Parameter an.

Darf ich fragen, ob du ein Framework verwendest?
I write my own game engines because if I'm going to live in buggy crappy filth, I want it to me my own - Ron Gilbert

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 096

Beruf: Student

  • Private Nachricht senden

3

09.09.2014, 00:19

Ich verwende bereits wglShareLists. Aber wie ich bereits schrieb, steht hier, dass VAOs eben nicht ge-shared werden können, auch nicht mit wglShareLists.
Daher meine Frage, wie man das Problem anders lösen kann.

Ich verwende kein Framework, nur low-level OpenGL.

dot

Supermoderator

Beiträge: 9 833

Wohnort: Graz

  • Private Nachricht senden

4

09.09.2014, 00:34

1) Für was das ganze Context Sharing?
2) Wo liegt das Problem, einfach für jeden Context ein separates VAO anzulegen? ;)

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 096

Beruf: Student

  • Private Nachricht senden

5

09.09.2014, 11:43

1) Ich habe mehrere Fenster in die ich rendern möchste. Jedes Fenster braucht seinen eigenen Context.
2) Ich will aber in allen Fenstern die selbe Szene rendern; da wäre es schön, wenn man auch die selben VAOs benutzen kann.

dot

Supermoderator

Beiträge: 9 833

Wohnort: Graz

  • Private Nachricht senden

6

09.09.2014, 12:07

[...] Jedes Fenster braucht seinen eigenen Context.

Nicht unbedingt, du kannst den selben Context mit verschiedenen hDC verwenden:

Zitat von »MSDN«

The hdc parameter must refer to a drawing surface supported by OpenGL. It need not be the same hdc that was passed to wglCreateContext when hglrc was created, but it must be on the same device and have the same pixel format.

;)

2) Ich will aber in allen Fenstern die selbe Szene rendern; da wäre es schön, wenn man auch die selben VAOs benutzen kann.

Das geht halt leider nicht...

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 096

Beruf: Student

  • Private Nachricht senden

7

09.09.2014, 13:11

Das heißt also ich brauche insgesamt nur ein HGLRC und beim Fenster-Wechsel muss ich nur das HDC bei "wglMakeCurrent" austauschen?!
Ok cool, das werde ich gleich mal ausprobieren, danke :-)

EDIT:
Was ist mit "it must be on the same device" gemeint?
Selbes Pixel Format ist klar, aber was heißt hier "on the same device" wenn es doch schon um den DeviceContext (HDC) geht?! ?(

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »LukasBanana« (09.09.2014, 13:21)


dot

Supermoderator

Beiträge: 9 833

Wohnort: Graz

  • Private Nachricht senden

8

09.09.2014, 13:25

Damit ist gemeint es muss am selben Adapter sein, d.h. du kannst z.B. nicht den selben HGLRC für zwei Fenster verwenden, die auf verschiedenen Bildschirmen liegen, die jeweils an einer anderen GPU hängen (verschiedene Bildschirme auf der selben GPU sollte z.B. allerdings gehen)... ;)

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 096

Beruf: Student

  • Private Nachricht senden

9

09.09.2014, 14:13

Funktioniert wunderbar, danke für den Hinweis :thumbsup:
Der GL Context ist eben nicht gerade intuitiv

stef

Treue Seele

Beiträge: 241

Wohnort: Kassel

Beruf: Softwareentwickler

  • Private Nachricht senden

10

15.09.2014, 15:22

Der GL Context ist eben nicht gerade intuitiv

Oh ja. Eigentlich ist ganz OpenGL nicht intuitiv :)


Wird ja jetzt alles neu gemacht ... :thumbsup:

Next Generation OpenGL Initiative
"In C++ it's harder to shoot yourself in the foot, but when you do, you blow off your whole leg." — Bjarne Stroustrup.

Werbeanzeige

Ähnliche Themen