質問

GLSL 1.40明細書を読んだ:

  

フラグメントの出力は、唯一のフロートすることができ、   署名された浮動小数点のベクトル、または   符号なし整数または整数ベクトル、   または任意のこれらの配列。行列と   構造は出力できません。断片   出力は、のように宣言されています   例を次に示します。

     

FragmentColor vec4アウト。   アウトUINT光度;

フラグメントの色がgl_FragColorを書いて定義されている...それは正しいでしょうか?誰かがこれらの出力についての私の考えをクリアするだろうか?私は、フラグメントの色を決定するために例の唯一の「FragmentColor」を書くことはできますか?私は(例えば「明度」)それらを読み返すことはできますか?

役に立ちましたか?

解決

あなたの例では、2つの出力を有しています。彼らは、GLSLプログラムのリンク後に関連したFBOスロットに対応しています。あなたはglBindFragDataLocationを使用してそれらをリダイレクトすることができます。

あなたはシェーダおよび結合FBOを起動したら、

、それはすべてglDrawBuffersによって設定されたドローマスクに依存します。たとえば、場合は、色の添付ファイル2に行くだろうGL_COLOR_ATTACHMENT0とそこGL_COLOR_ATTACHMENT2、0が添付ファイル0に行きますその出力インデックスを意味するだろう、と出力インデックス1を通過します。

他のヒント

グローバル出力変数gl_FragColorはGLSLバージョン120の後に推奨されていません。 今、あなたはあなたの例のように、自分でそれを名前とタイプを与える必要があります。 複数の出力については、 このリンクはあなたのマッピングに関する情報を提供します: http://www.opengl.org/wiki/GLSL_Objects# Program_linkingする

(そして、私はその時リンクが見つかりました:のhttp:// WWWを。 opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=270999する

この情報がお役に立てば幸い! :D

をメールで送信私はkvarkは、関連する情報を与えていることがわかります。とにかく、多分あなたはあまりにも私のテキストから何かを得た。

私はいくつかの例を与えたいます:

void add(in float a, in float b, out float c)
{
    //you can not use c here. only set value
    //changing values of a and b does not change anything.
    c = a + b;
}

void getColor(out float r, out float g, out float b)
{
   //you can not use r, g, b here. only set value
   r = gl_FragColor.r;
   g = gl_FragColor.g;
   b = gl_FragColor.b;
}

void amplify(inout vec4 pixelColor, in value)
{
   //inout is like a reference
   pixelColor = pixelColor * value;
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top