OpenGLのデバッグについて学ぶとき、何か問題が発生したときにOpenGL APIからデバッグエラーメッセージを受け取る関数コールバックを実装しました。チュートリアルでは、関数シグネチャは次のようになっています。この関数の先頭に__stdcallを付ける必要がありますか?
typedef void APIENTRY funcname(GLenum source, GLenum type, GLuint id,
GLenum severity, GLsizei length, const GLchar* message, const void* userParam);
Windowsではこのコールバックを実装しました。 Windowsでは、APIENTRYは__stdcallの定義です。 __stdcall私は、呼び出し規約を指定するWindows固有のキーワードと考えています。後で私は自分のコードをLinuxに移植しました。そして、まずは、GCCとEclipseの間では、Windows定義のため、APIENTRYを認識しませんでした。私のコールバック関数として「glCheckError_前に期待される初期化子」
です
:だから私は、私はそれが認識するかどうか分からないこれ、__stdcallするためにそれを変更しましたが、関係なく、それはというエラーを投げましたvoid __stdcall glCheckError _(/ Params /)。 __stdcall序文を削除すると、プログラムがうまく動作します。
WindowsまたはLinuxの場合、この接頭辞が必要かどうかは疑問です。面白いのは、関数シグネチャに__stdcallを追加することを提案した場所は、OpenGLのドキュメントを保持するKhronosのWebページだったから、OS固有の情報を指定してはならない限り、OpenGLは、プラットフォーム。だから私はこの__stdcallプレフィックスが必要ですか?
このキーワードはVisual C++固有のものです – Asesh
APIENTRYと__stdcallの両方ですか?私はそれがOpenGLのドキュメントは、このようにコールバックを行うために言及して奇妙なことがわかります。 Windows固有のチュートリアルではないためです。 – Zebrafish
APIENTRYは__stdcallとして定義されています – Asesh