GLSL シェーダーを使用するプロジェクトがあります。
このプロジェクトは、何か問題が発生したり、追加のデバッグ出力を明示的にオンにしない限り、stdout に何も出力しないように設計されています。
シェーダーのコンパイルが失敗した場合、指定されたログの長さglGetProgramInfoLog
は >0 になり、成功した場合は >0 になり、代わりにコンパイルの警告が表示されます。完全にコンパイルされたシェーダーがある場合、ログの長さは 1 未満です...これは、私の開発マシンの NVidia カードでどのように機能するかです。
私の罪のために、Intel統合グラフィックスカードを搭載したラップトップで開発も行っています。コードは正常に実行されますが、シェーダー コンパイルを行うたびにログに次のものが含まれます。
「シェーダーはハードウェア上で実行できるように正常にコンパイルされました」
ある種の文字列分析を除いて、文字列を出力する必要があるかどうかを判断する方法がないため、これは非常に面倒です。
strstr("successfully",log)
それが望ましくない理由が明らかであることを願っています。OpenGL api を使用してメッセージを出力する価値があるかどうかを判断するにはどうすればよいですか?
編集:
使用するglGetShaderiv(shaderobj,GL_COMPILE_STATUS,&err);
と、コンパイル警告は表示されず、エラーのみが表示されます。