3

GLSL シェーダーを使用するプロジェクトがあります。

このプロジェクトは、何か問題が発生したり、追加のデバッグ出力を明示的にオンにしない限り、stdout に何も出力しないように設計されています。

シェーダーのコンパイルが失敗した場合、指定されたログの長さglGetProgramInfoLogは >0 になり、成功した場合は >0 になり、代わりにコンパイルの警告が表示されます。完全にコンパイルされたシェーダーがある場合、ログの長さは 1 未満です...これは、私の開発マシンの NVidia カードでどのように機能するかです。

私の罪のために、Intel統合グラフィックスカードを搭載したラップトップで開発も行っています。コードは正常に実行されますが、シェーダー コンパイルを行うたびにログに次のものが含まれます。

「シェーダーはハードウェア上で実行できるように正常にコンパイルされました」

ある種の文字列分析を除いて、文字列を出力する必要があるかどうかを判断する方法がないため、これは非常に面倒です。

strstr("successfully",log)

それが望ましくない理由が明らかであることを願っています。OpenGL api を使用してメッセージを出力する価値があるかどうかを判断するにはどうすればよいですか?

編集:

使用するglGetShaderiv(shaderobj,GL_COMPILE_STATUS,&err);と、コンパイル警告は表示されず、エラーのみが表示されます。

4

1 に答える 1

7

どうぞ:

glGetShaderiv(shaderobj,GL_COMPILE_STATUS,&err);
if(!err) { /* now print out the error log */ }

これは、取得できる唯一のコンパイル ステータスです。警告があるかどうかを判断するために見つけた移植可能な方法はありません。(コンパイルログは、成功の通知を含め、実装が気にするものでいっぱいになる可能性があります。)

于 2009-03-16T06:14:19.300 に答える