glUseProgram — カレントのレンダリング状態の一部としてプログラムオブジェクトをインストールします
void glUseProgram(
|
GLuint program) ; |
program
カレントの描画状態の一部として使用される実行可能オブジェクトを持つプログラムオブジェクトのハンドルを指定します。
glUseProgram
は、カレントの描画状態の一部として program
で指定されたプログラムオブジェクトをインストールします。
glAttachShader でシェーダーオブジェクトを正常にアタッチし、
glCompileShader でシェーダーオブジェクトを正常にコンパイルし、
glLinkProgram でプログラムオブジェクトを正常にリンクすることにより、
プログラムオブジェクトに1つ以上の実行可能なプログラムが作成されます。
プログラムオブジェクトには、正常にコンパイル及びリンクされた GL_VERTEX_SHADER
タイプのシェーダーオブジェクトが一つ以上含まれている場合、バーテックスプロセッサーで実行される実行可能オブジェクトが含まれます。
プログラムオブジェクトには、正常にコンパイルおよびリンクされた GL_GEOMETRY_SHADER
タイプの1つ以上のシェーダーオブジェクトが含まれている場合、ジオメトリプロセッサーで実行される実行可能オブジェクトが含まれます。
同様に、プログラムオブジェクトには、正常にコンパイルおよびリンクされた GL_FRAGMENT_SHADER
タイプの1つ以上のシェーダーオブジェクトが含まれている場合、フラグメントプロセッサーで実行される実行可能オブジェクトが含まれます。
プログラムオブジェクトの使用中、アプリケーションは、接続されたシェーダーオブジェクトの変更、接続されたシェーダーオブジェクトのコンパイル、追加のシェーダーオブジェクトの接続、シェーダーオブジェクトのデタッチまたは削除を自由に行えます。
これらの操作は、カレントの状態の一部である実行可能オブジェクトには影響しません。
ただし、現在使用中のプログラムオブジェクトを再リンクしてリンク操作が成功した場合、現在のレンダリング状態の一部としてプログラムオブジェクトがインストールされます(glLinkProgram 参照)。
現在使用中のプログラムオブジェクトが正常に再リンクされない場合、そのリンクステータスは GL_FALSE
に設定されますが、実行可能オブジェクトおよび関連する状態は、glUseProgram
の後続の呼び出しによって使用状態から削除されるまで、カレントの状態の一部のままです。
使用状態から削除された後、正常に再リンクされるまで、カレントの状態の一部にすることはできません。
program
が 0 の場合、カレントの描画状態は無効なプログラムオブジェクトを参照しており、シェーダーの実行結果は未定義です。
ただし、これはエラーではありません。
program
に GL_FRAGMENT_SHADER
タイプのシェーダーオブジェクトが含まれていない場合、実行可能オブジェクトはバーテックスプロセッサー、場合によってはジオメトリプロセッサーにインストールされますが、フラグメントシェーダーの実行結果は未定義になります。
Like buffer and texture objects, the name space for program objects may be shared across a set of contexts, as long as the server sides of the contexts share the same address space. If the name space is shared across contexts, any attached objects and the data associated with those attached objects are shared as well.
Applications are responsible for providing the synchronization across API calls when objects are accessed from different execution threads.
GL_INVALID_VALUE
is generated if
program
is neither 0 nor a value
generated by OpenGL.
GL_INVALID_OPERATION
is generated if
program
is not a program object.
GL_INVALID_OPERATION
is generated if
program
could not be made part of current
state.
GL_INVALID_OPERATION
is generated if
transform feedback mode is active.
glGet
with the argument GL_CURRENT_PROGRAM
glGetActiveAttrib with a valid program object and the index of an active attribute variable
glGetActiveUniform with a valid program object and the index of an active uniform variable
glGetAttachedShaders with a valid program object
glGetAttribLocation with a valid program object and the name of an attribute variable
glGetProgram with a valid program object and the parameter to be queried
glGetProgramInfoLog with a valid program object
glGetUniform with a valid program object and the location of a uniform variable
glGetUniformLocation with a valid program object and the name of a uniform variable
OpenGL Version | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Function / Feature Name | 2.0 | 2.1 | 3.0 | 3.1 | 3.2 | 3.3 | 4.0 | 4.1 | 4.2 | 4.3 | 4.4 | 4.5 |
glUseProgram
|
✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
glAttachShader, glBindAttribLocation, glCompileShader, glCreateProgram, glDeleteProgram, glDetachShader, glLinkProgram, glUniform, glValidateProgram, glVertexAttrib
Copyright © 2003-2005 3Dlabs Inc. Ltd. Copyright © 2010-2014 Khronos Group. This material may be distributed subject to the terms and conditions set forth in the Open Publication License, v 1.0, 8 June 1999. http://opencontent.org/openpub/.