OpenGLは状態マシンです。OpenGLコンテキストはその状態を保持します。状態には、どのテクスチャがどのテクスチャユニットにバインドされているか、現在のFBOが持っているアタッチメントなどの情報が含まれています。
現在のコンテキストを設定すると、すべての状態が古いコンテキストから新しいコンテキストに切り替わります。次に例を示します。
glfwMakeContextCurrent(window1);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture1);
glfwMakeContextCurrent(window2);
これが行うことは、コンテキストをwindow1
最新のものにすることです。次に、2Dテクスチャユニットを有効にしてバインドtexture1
します。
次に、window2
現在のコンテキストを作成します。有効状態を確認GL_TEXTURE_2D
すると、falseになります(以前にwindow2
コンテキストで有効にしていない場合)。同様に、2Dテクスチャユニットにバインドされているテクスチャを確認すると、バインドされているテクスチャがないか、バインドされていないテクスチャが見つかる可能性がありますtexture1
。
基本的に、すべての描画は現在のコンテキストで行われます。別のコンテキストを現在にすると、すべての描画がそのコンテキストで行われるようになります。
マルチスレッドのOpenGLアプリケーションでは、スレッドごとに単一のコンテキストを持つのが一般的です。このようにして、各スレッドは独自のコンテキストに描画し、他のスレッドのコンテキストの状態を台無しにしません。