9

次の頂点シェーダー プログラムを使用して、単純な OpenGL 3 アプリを実行しようとしました。

in vec4 vPosition;
out vec2 otexcoord;

uniform mat4 modelview;
uniform mat4 projection;

void main()
{
    gl_Position = projection * modelview * vPosition;
    otexcoord.s = vPosition.x;
    otexcoord.t = vPosition.y * -1.0;
};

このコードを別の会社の 3 つの GPU で実行しましたが、結果は異なります。

  • インテルのドライバーではエラーもなく、問題なく動作しています。
  • Nvidia のドライバーでは、「out can't be used with non-varying otexcoord」というエラーが表示されます。
  • AMD のドライバーでは、エラーは「暗黙のバージョン番号 110 は GL3 前方互換コンテキストでサポートされていません」です。

AMDのものは最も目立たないようです。実際、私はそれについて何の考えも持っていません。

以下はクエリ文字列です

  • インテル: OpenGL 3.2.0 - ビルド 9.17.10.2932 GLSL 1.50 - ビルド 9.17.10.2932
  • Nvidia: Cg コンパイラ経由の OpenGL 3.2.0 GLSL 1.50 NVIDIA
  • AMD: OpenGL 3.2.12002 コア プロファイル コンテキスト 9.12.0.0 GLSL 4.20

Intel と Nvidia は似ており、GLSL 1.50 コンパイラです。AMD は GLSL 4.20 です。

以下は質問です: -

  1. この場合、Intel と Nvidia のコンパイラのうち、どちらが正しく動作していますか?
  2. AMD のコンパイラからのエラー メッセージの本当の意味は何ですか? エラーを修正するには何が必要ですか。
4

1 に答える 1

19

常に#version ディレクティブを使用する必要があります。そうしないと、コンパイラは GLSL バージョン 1.10 であると見なします。つまりout、有効なキーワードではありません。

于 2013-03-05T21:39:31.447 に答える