0

Quadro 4000 カード用の最新の NVidia ドライバーをインストールしました。この瞬間から、シェーダー リンクのいずれかがシェーダー リンク エラーで失敗します。個別のシェーダー オブジェクトで OpenGL 4.2 を使用していることは注目に値します。私の OS は Windows7 64bit です。更新前は 309.x バージョンのドライバーを使用していましたが、すべて正常に動作していました。今、バージョン 295.x にロールバックしたところ、再び機能しました。誰でもそれについて何か知っていますか?それはドライバーのバグでしょうか? はいの場合、それについて何ができますか?

失敗する頂点シェーダーの単純なパスを次に示します。

#version 420 core

layout(location = 0) in vec4 position;
layout(location = 1) in vec2 uvs;
layout(location = 2) in vec3 normal;


smooth out vec2 uvsOut;
void main()
{
    uvsOut=uvs;
    gl_Position = position;
}

別の質問ですが、NVIdia がシェーダー バージョンのセマンティクス ルールを強化した可能性はありますか? つまり、私は OpenGL 互換性プロファイルを使用していますが、GLSL では #バージョン 420 コアをマークしています。問題になる可能性はありますか?

アップデート:

プログラム情報ログからの詳細情報:

エラー C7592: ARB_separate_shader_objects は、そのメンバーにアクセスする前に組み込みブロック gl_PerVertex を再宣言する必要があります。

ええ、また、ドライバーライターには「アクセス」のタイプミスがあります;)

今、私は実際にこれを追加してリンクエラーを解決しました:

out gl_PerVertex
{
    vec4 gl_Position;
};

以前のドライバが gl_PerVertex ブロックの再定義を強制しなかったのは奇妙です.今、このアドオンはリンクの問題を解決しましたが、いくつかのさまざまなユニフォームが機能しない別のものを開きました.たとえば、私は頂点シェーダーに持っています:

  out vec4 diffuseOut;

そしてフラグメントシェーダーでは:

 in vec4 diffuseOut;

それで

  OUTPUT = diffuseOut;/// returns black while red is expected.

更新 2: わかりました。新しいドライバーは、シェーダーの入力/出力変数に対してより厳密です。古いドライバーでは、頂点シェーダーでいくつかの「アウト」を定義できましたが、フラグメント シェーダーでそれらの「イン」マッチも定義しませんでした。動作しました。今、vert と frag プログラムで宣言された「ins」と「outs」を正確に一致させる必要があるようです。エラーがスローされないのは奇妙ですが、その結果、定義された「ins」が空になります目的地。

4

0 に答える 0