1つのオプションは、均一変数を介して情報を渡すことです。
後
glUseProgram(myShaderProgram);
あなたが使用することができます
GLint myUniformLocation = glGetUniformLocation(myShaderProgram, "myUniform");
そして例えば
glUniform1f(myUniformLocation, /* some floating point value here */);
頂点シェーダーまたはフラグメントシェーダーで、次の宣言を追加する必要があります。
uniform float myUniform;
これで、シェーダーで、を介して以前に渡した値に(読み取り専用で)アクセスできるようになりましたglUniform1f
。
もちろん、均一変数は、配列、構造体、行列などの複雑な型を含む、任意の有効なGLSL型にすることができます。OpenGLは、glUniform
各タイプに適した通常のサフィックスを持つ関数を提供します。たとえば、タイプの変数に割り当てるには、またはvec3
を使用します。glUniform3f
glUniform3fv
glBegin
注:シェーダーの実行中、つまり/glEnd
ブロックで値を変更することはできません。これは読み取り専用であり、処理されるすべてのフラグメント/頂点で同じです。
ユニフォームを使用したチュートリアルもいくつかあります。「glslユニフォーム変数」をグーグルで検索すると、それらを見つけることができます。
それがお役に立てば幸いです。