Cosa fa esattamente "makeContextCurrent"?


12

Sono piuttosto confuso riguardo a quella funzione. Il riferimento al contesto GLFW dice quanto segue:

Questa funzione rende corrente il contesto OpenGL o OpenGL ES della finestra specificata sul thread chiamante. Un contesto può essere reso corrente su un singolo thread alla volta e ogni thread può avere un solo contesto corrente alla volta.

Ma non mi aiuta molto.
Può funzionare come glBind-metodi? (glBindBuffer, glBindVertexArray e così via)

Risposte:


21

OpenGL è una macchina a stati. Un contesto OpenGL contiene quello stato. Lo stato contiene informazioni quali quali trame sono legate a quali unità di trama, quali allegati ha l'attuale FBO e cose del genere.

Quando si imposta il contesto corrente, si passa tutto lo stato dal vecchio contesto al nuovo contesto. Ecco un esempio:

glfwMakeContextCurrent(window1);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture1);

glfwMakeContextCurrent(window2);

Ciò che fa è rendere window1attuale il contesto . Quindi abilita l'unità di trama 2D e si lega texture1ad essa.

Successivamente rende il contesto window2attuale. Se si dovesse verificare lo stato abilitato di GL_TEXTURE_2Desso sarebbe falso (a meno che non lo si fosse precedentemente abilitato nel window2contesto). Allo stesso modo, se si controlla quale trama è associata all'unità trama 2D, è probabile che non si rilevi alcuna trama o una trama diversa da quella texture1associata.

Fondamentalmente tutto il disegno avviene nel contesto attuale. Se rendi corrente un contesto diverso, ora tutti i disegni verranno eseguiti in quel contesto.

È comune avere un singolo contesto per thread in un'applicazione OpenGL multi-thread. In questo modo ogni thread sta disegnando nel proprio contesto e non confonde lo stato dei contesti su altri thread.


1
Non ho più di 15 punti per cui non posso votare la tua fantastica risposta. Grazie!!!
Adrian,

1
Nessun problema. Sono contento di aver potuto aiutare.
user1118321

Ho letto questo commento, quindi mi sono unito a computergrafica e ho votato a favore di questa risposta.
J MADISON,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.