ホームページ  >  記事  >  バックエンド開発  >  GLSL フラグメント シェーダがメッセージなしでコンパイルに失敗する

GLSL フラグメント シェーダがメッセージなしでコンパイルに失敗する

PHPz
PHPz転載
2024-02-14 12:18:09541ブラウズ

GLSL 片段着色器无法编译且没有任何消息

php Xiaobian Yuzai さんは、コンパイル中に GLSL フラグメント シェーダーで問題が発生したことを発見しましたが、エラー メッセージはありませんでした。これにより、開発者は何が問題だったのか混乱する可能性があります。この問題を解決する前に、まず明確にしておきたいのは、エラー メッセージが表示されないのは、通常、コンパイラがエラー メッセージを生成しなかったか、エラー メッセージが無視されたためであるということです。次に、考えられる原因を段階的にトラブルシューティングして解決策を見つける必要があります。

質問内容

OpenGlのgo-glバインディングを使用しています。

両方のシェーダーのソースを次のように定義しました:

リーリー

頂点シェーダーは問題なく作成され、コンパイルされます。

次は、フラグメント シェーダーを作成してコンパイルするコードです:

リーリー

以下を出力します (残念なことに、情報ログ メッセージはありません):

リーリー

バージョン core/compatibility を切り替え、FragColor の名前と vec4 の異なる値を変更してみました。

また、if ブロックをコメントアウトしてプログラムの作成を続行してみました。プログラムのブロックをチェックすると、シェーダーがコンパイルされていないため予期されるエラーが出力されます: error: linking with uncompiled/unspecializedshader

フラグメント シェーダーのコンパイル方法についてフィードバックはありますか?

Solution

Call glShaderSource() ソース シェーダを設定するコードのみ。 コンパイルできません。次に、glCompileShader() を個別に呼び出す必要があります。 リーリー 原因

gl.GetShaderiv() および gl.COMPILE_STATUS の結果 successgl.FALSE です。これは、最後のコンパイルが成功した場合に gl.COMPILE_STATUSgl.TRUE のみを生成するためです。ただし、gl.CompileShader() を呼び出したことがないため、これまでコンパイルが成功したことがなく、gl.FALSE を受け取ります。また、これまでエラーが発生していないため、情報ログは空です。

以上がGLSL フラグメント シェーダがメッセージなしでコンパイルに失敗するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。