1

NVIDIA で「#version 330 コア」を使用し、

glBindAttribLocation(program, 0, "in_Vertex"); を使用して 入力頂点は「in vec4 in_Vertex;」で機能します。ただし、クライアント アプリで OGL 関数呼び出しがなくても機能することに気付きました。「デフォルトの最初の入力変数」のようです。なんで?省略するか、glBindAttribLocation を介して明示的に接続する必要がありますか? 【規格上理想とは?】 また「vec4 gl_Vertex;」では 仕様が非推奨と呼んでいる間は機能し、シェーダーのコンパイラーは警告を出しません。なんで?少なくとも警告することを期待していたでしょう。最後の問題はコンパイラ (GLSL コンパイラ) のバグかもしれませんが、最初の問題は特に不可解です。

4

1 に答える 1

3
  1. 属性を場所にバインドしない場合、GL がそれを行います。使用する場所は特定されていませんが、たまたま同じ値を持っていました。

    • どの場所を選択したかGLに尋ねることができますglGetAttribLocation
    • 指定されていませんが、実装がシェーダーの順序で場所をバインドすることを選択するのを見てきました。最初は 0、2 番目は 1、...
  2. それぞれに有効なユースケースがあるため、標準はこれら 2 つのオプションをオープンのままにします。

  3. 非推奨に関しては、nvidiaは、非推奨は間違った決定であると明確に述べました。最終的には、誰かが警告を発するコードを書かなければなりません...ですから、警告すべきであっても、彼らが警告しないのは驚くべきことではありません。

于 2010-09-01T06:56:09.800 に答える