Apa tepatnya yang dilakukan “makeContextCurrent”?

12

Saya cukup bingung tentang fungsi itu. Referensi konteks GLFW mengatakan sebagai berikut:

Fungsi ini membuat konteks OpenGL atau OpenGL ES dari jendela yang ditentukan saat ini pada utas panggilan. Konteks hanya dapat dibuat saat ini pada satu utas pada satu waktu dan setiap utas hanya dapat memiliki satu konteks saat ini pada satu waktu.

Tapi itu tidak banyak membantu saya.
Bisakah ini bekerja seperti glBind-metode? (glBindBuffer, glBindVertexArray dan sebagainya)

Adrian
sumber

Jawaban:

21

OpenGL adalah mesin negara. Konteks OpenGL menyatakan seperti itu. Negara berisi informasi seperti tekstur yang terikat ke unit tekstur mana, yang lampiran FBO saat ini miliki, dan hal-hal seperti itu.

Saat Anda mengatur konteks saat ini, Anda mengalihkan semua status dari konteks lama ke konteks baru. Ini sebuah contoh:

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

glfwMakeContextCurrent(window2);

Apa yang dilakukan adalah membuat konteks window1saat ini. Ini kemudian memungkinkan unit tekstur 2D dan mengikatnya texture1.

Selanjutnya ia membuat konteks window2saat ini. Jika Anda memeriksa keadaan yang diaktifkan GL_TEXTURE_2Ditu akan salah (kecuali Anda sebelumnya mengaktifkannya pada window2konteks). Demikian juga, jika Anda memeriksa tekstur mana yang terikat ke unit tekstur 2D, Anda mungkin akan menemukan tidak ada tekstur yang terikat, atau beberapa tekstur selain texture1yang terikat.

Pada dasarnya semua gambar terjadi dalam konteks saat ini. Jika Anda membuat konteks yang berbeda menjadi arus, maka semua gambar sekarang akan terjadi dalam konteks itu.

Adalah umum untuk memiliki konteks tunggal per utas dalam aplikasi OpenGL multi-utas. Dengan begitu setiap utas menarik ke dalam konteksnya sendiri dan tidak mengacaukan keadaan konteks pada utas lainnya.

pengguna1118321
sumber
1
Saya tidak memiliki lebih dari 15 poin skor sehingga saya tidak dapat memberikan jawaban Anda yang luar biasa. Terima kasih!!!
Adrian
1
Jangan khawatir. Senang aku dapat membantu.
user1118321
Saya membaca komentar ini jadi saya bergabung dengan computergraphics dan memutakhirkan jawaban ini.
J MADISON