Mac OS X (Mountian Lion) で GLUT を使用して単純な OpenGL 3.2 (GLSL 1.5 を使用) プログラムを作成しようとしていますが、glValidateProgram からエラーが発生し続けます。
「検証に失敗しました: 現在の描画フレーム バッファが無効です。」
このエラーが発生する原因は何ですか?
OPのように、これを使用するコードに遭遇しましたが、プログラムリンクステップの直後に実装したことを知らずに実装しました。同じエラーが発生しました。
私はここでは専門家ではありませんが、いくつかの観察に基づいて、@ robinjam が何を言っているように見えるかを明確にしたいと思いました (これは、GL ドキュメントが言っていることを反映していますglValidateProgram
)。
私が使用していたサンプル コードは、Apple の iOS テスト OpenGL ES 2.0 デモ プロジェクトでした。デバイスでこの正確なコードをまだ実行していませんが、シミュレーターでこのValidation Failed: Current draw framebuffer is invalid.
エラーが発生します。ただし、これを実行するメソッド- (BOOL)validateProgram:(GLuint)prog
は に含まれていることに注意してくださいViewController.mm
(.m
早い段階で C++ に感染させたからではありません) が、このサンプル コードには実際に を呼び出すコードはありません。
したがって、glValidateProgram の目的は、プログラムをリンクした後に追加の「チェック」ステップとして使用することではありません。GL とアプリケーションの状態は、この時点でそのプログラムを実際に使用する準備がほとんど整っていないためです。デフォルトのフレームバッファ(ビット深度、マルチサンプルバッファなど)であり、それがエラーのヒントです。
glValidateProgram を呼び出す適切な場所は、実際のレンダリング呼び出しを行う直前です。
デバッグに役立ちます。これは、何か問題が発生したと思われるときにドライバーが私たちを助ける方法を提供するためのオプションの方法です。すべてがスムーズに機能しているデバッグ以外の状況でレンダリングするたびにこれを呼び出すのはばかげています。