Qt5でのOpenGLサポートのアーキテクチャを必死に理解しようとしています。
私の現在の問題は次のとおりです。既存の OpenGL コード ( OpenGL ES ではなくデスクトップ) があり、glGenBuffersARB
. Qt5 の外部で、このような拡張機能の関数にアクセスするのは簡単です。たとえば、GLEWを使用すると、次のように簡単に実行できます。
glewInit();
すべてが魔法のように期待どおりに機能し、すぐに使い始めることができましglGenBuffersARB
た。心配なことがあれば、glewIsSupported
サポートされていることを確認するために電話をかけることができました.
しかし、Qt5 では、GLEW とQOpenGLFunctions
一緒にうまく動作しないという警告があります (からコピーqopenglfunctions.h
):
#ifdef __GLEW_H__
#if defined(Q_CC_GNU)
#warning qopenglfunctions.h is not compatible with GLEW, GLEW defines will be undefined
#warning To use GLEW with Qt, do not include <qopengl.h> or <QOpenGLFunctions> after glew.h
#endif
#endif
したがって、私はこの質問のために、好奇心の溝 GLEW を完全に満たし、純粋な Qt5 アプローチのために Qt5 のみに依存しているとしましょう。glGenBuffersARB に依存する既存の OpenGL コードを、すべての拡張関数を手動でバインドせずに機能させるにはどうすればよいですか?
注:この回答のヒントに従って、これを行うことができることを知っています:
auto functions = context->versionFunctions<QOpenGLFunctions_3_3_Core>();
if (!functions) error();
functions->initializeOpenGLFunctions();
functions->glGenBuffersARB(...);
しかし、そうすると、既存の OpenGL コードのすべての行にプレフィックスを付ける必要がfunctions->
あります。