13

私はOpenGLを使ってプログラムを書いています。最近、OpenGL Shading Language を学び始めました。私は初心者です。そのため、回答に詳細を記入してください。

私の質問は次のとおりです。

  1. GLSL のさまざまなタイプの変数 (修飾子) は何ですか?
  2. それらは何に使用されますか?
  3. それらは互いにどう違うのですか?

私は、頂点間で補間されるために頂点シェーダーからフラグメントシェーダーに渡される「可変」変数にのみ精通しています。それ以外は、私は何も知りません。

4

3 に答える 3

21

OpenGL 3+ の場合:

  • varying非推奨です
  • constは...まあ、定数です!
  • uniformドローコールごと(最大)の値です
  • inglAttribDivisor とハードウェア インスタンス化を使用している場合は、前のパイプライン ステージからの入力、つまり最大で頂点ごと (またはフラグメントごと) の値、プリミティブごとの値です。
  • out次のステージへの出力用です

フラグメント シェーダの出力について: OpenGL3 以降では、フラグメント シェーダ出力の組み込み変数 ( などgl_FragColor、 の顕著な例外を除く) のほとんどは非推奨であり、ユーザー定義の変数gl_FragDepthに置き換える必要があります。out

デフォルトのフレームバッファに出力している場合、フラグメント シェーダの出力として宣言したものはすべてカラー バッファに格納されます。outFBO を複数のカラー バッファー (つまり、複数のレンダー ターゲット) にバインドした場合は、各変数を を介して正しいカラー バッファー インデックスに手動でバインドする必要がありますglBindFragDataLocationIndexed

GLSL (「サーバー」) 側と OpenGL (「クライアント」) 側の両方について必要なすべての詳細を見つけることができます。

  • OpenGL 仕様、具体的にはフラグメント シェーダーでのカラー バッファー出力のページ 248 ~ 250。
  • シェーダー出力については、GLSL 仕様の 38 ページ以降を参照してください。
于 2011-06-01T07:37:21.207 に答える
2
  • Uniform: 描画呼び出しごとの定数データ。通常はシェーダーをパラメーター化するために使用されます。
  • Varying: VS と FS の間でデータを転送し、その過程でプリミティブに沿って補間します。
  • 属性: これは、頂点シェーダーの入力である頂点属性データです。プリミティブの頂点ごとに指定されます。
于 2011-06-01T03:56:29.443 に答える
1

チュートリアルを確認してください: http://www.lighthouse3d.com/tutorials/glsl-tutorial/

均一変数があります(すべてのスレッドで静的)

属性変数 (頂点ごとに注入)

さまざまです(ご存じのとおり)

于 2011-06-01T03:43:31.727 に答える