domenica 23 agosto 2009

OpenGL context sharing

Ovvero, come condividere un context OpenGL tra diverse finestre o addirittura tra applicazioni differenti.
Se state utilizzando Windows, dovrete utilizzare la funzione wglShareLists(). Altrimenti se come nel mio caso utilizzate GLX, ci servirà il parametro share della funzione glXCreateContext().


GLXContext ctx1 = glXCreateContext(display, vi, 0, true);
GLXContext ctx2 = glXCreateContext(display, vi, ctx1, true);

Nel momento in cui creeremo il secondo context, entrambi avranno visibilità sulle risorse già create fino a quel momento e su quelle che verranno create in seguito.
Condividere il context ci permetterà non solo di poter utilizzare le stesse risorse (textures, shaders, etc.), ma anche come nel mio caso di poter effettuare il renderToTexture da un applicazione e renderizzare poi quella texture da un'altra applicazione.

Vi rimando comunque alla documentazione ufficiale.

2 commenti:

Giovanni 11:48 AM  

molto interessante, era una cosa che cercavo da tempo!
non sapendo come condividere il context avevo intenzione di fare un processo (ad ogni modo sempre senza usare glut) col compito di renderizzare e vari thread col compito di comporre la scena. in questo modo se ho ben capito posso svincolarmi dall'uso dei thread e farli diventare processi a sé stanti, condividendo in qualche modo il puntatore del context (magari tramite shared memory) con questi processi giusto? ti ringrazio in anticipo.

Giovanni

alex9978 11:10 PM  

Esatto puoi condividere il context anche tra applicazioni differenti, basta condividere il GLXContext. Se non ricordo male però GLUT non ti permette di usare questa funzione. Pensa che io usavo engine differenti contemporaneamente che condividevano lo stesso context (es. Ogre3D con il mio engine 2d e un modulo di compositing realtime che miscelava entrambe le sorgenti video)...

Posta un commento

About This Blog

  © Blogger template PingooIgloo by Ourblogtemplates.com 2009

Back to TOP