質問
GLSLシェーダーを使用するプロジェクトがあります。
このプロジェクトは、何か問題が発生したり、追加のデバッグ出力を明示的にオンにしない限り、stdoutに何も出力しないように設計されています。
シェーダーのコンパイルが失敗すると、glGetProgramInfoLog
で指定されたログの長さは<!> gt; 0になり、場合によっては<!> gt; 0に成功し、代わりに warnings をコンパイルします。完璧にコンパイルするシェーダーがある場合、ログの長さは<!> lt; 1 ...です。これは、私の開発マシンのNVidiaカードでの動作です。
私の罪のために、Intel統合グラフィックスカードを搭載したラップトップでいくつかの開発もしています。コードは問題なく実行されますが、シェーダーコンパイルを実行するたびに、ログに次の内容が含まれます。
<!> quot; shaderは、ハードウェアで実行するために正常にコンパイルされました<!> quot;
これは非常に迷惑です。文字列分析のようなものを除いて、文字列を出力するかどうかを判断する方法がありません。たとえば:
strstr("successfully",log)
願わくば、それが望ましくない理由は明白です。 OpenGL APIを使用して、メッセージを印刷する価値があるかどうかを確認できますか?
編集:
glGetShaderiv(shaderobj,GL_COMPILE_STATUS,&err);
を使用すると、コンパイルの警告は表示されず、エラーのみが表示されます。
解決
ここに行きます:
glGetShaderiv(shaderobj,GL_COMPILE_STATUS,&err);
if(!err) { /* now print out the error log */ }
これが唯一のコンパイル状態です。警告があるかどうかを判断するためのポータブルな方法はありません。 (コンパイルログは、成功の通知を含め、実装がその中に入れようとするものでいっぱいになる可能性があります。)