1

GLSL シェーダー プログラミングを始めたばかり ですが、ソース ファイル内にすべての opengl 関連のヘッダーとファイルを含めたにもかかわらず、プリプロセッサ ディレクティブ ヘッダー スタックにディレクティブunrecognized preprocessing directive を配置するたびに、#version

シェーダー:

#version 400
in vec3 Color; 
out vec4 FragColor; 
void main() 
{ 
    FragColor = vec4(Color, 1.0); 
}

この問題を解決するにはどうすればよいですか?

4

2 に答える 2

2

ディレクティブは#version、コメントと空白を除いて、他の何よりも前にシェーダーで発生する必要があります。

プリプロセッサ ディレクティブでさえ違法です (NVIDIA は受け入れますが、AMD は受け入れません!)。これで問題が解決しない場合は、さらに情報を提供してください。例glGetString(GL_VERSION)glGetString(GL_VENDOR).

あなたのコメントを参照すると、シェーダーがどのようにコンパイルされるかを誤解しています。シェーダーは C++ コンパイラーではコンパイルできません。シェーダーをテキスト ファイルに入れて実行時にロードし、OpenGL のコンパイル メソッドを呼び出します。

于 2012-11-08T08:43:55.790 に答える
0

#versionプリプロセッサ コマンドは C++ のコンパイル時に実行され、テキストglslベースのみであり、コンパイルする必要はありません。#include "file"ヘッダーまたはプログラムで使用する.cppと、コンパイルとエラーがトリガーされます。#includeしたがって、ファイルをアプリケーションに glslしないでください。

于 2017-06-01T12:06:12.743 に答える