プロジェクトを Qt 4.8 から 5.4 に移行しています。複数のスレッドで複数のコンテキストを使用します。この目的のために GLEW MX を使用します (必要なコンテキストを最新にしてから、GLEWContextStruct のローカル インスタンスで glewInit() を呼び出します)。
QGLWidget と QGLContext を QOpenGLWidget と QOpenGLContext に変更しようとしていますが、 glew を初期化できなくなりました。GLEW はエラーを返しませんが、glGetError() は返します。
OpenGLバージョンでQt 5.4 64をインストールしました。
最小限に縮小されたコードは次のとおりです。
#include <QtWidgets/QApplication>
#define GLEW_MX
#define GLEW_STATIC
#include <GL/glew.h>
#include <qopenglcontext.h>
#include <qwindow.h>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
bool errQt;
int errGlew;
GLenum errorGL;
QSurfaceFormat requestedFormat;
requestedFormat.setVersion(3, 3);
requestedFormat.setProfile(QSurfaceFormat::OpenGLContextProfile::CoreProfile);
//Creates the QGLWidget using the current context:
QWindow window;
window.setSurfaceType(QSurface::OpenGLSurface);
window.setFormat(requestedFormat);
window.create();
//Create context
QOpenGLContext context;
context.setFormat(requestedFormat);
errQt = context.create(); //true
//Bind context
context.makeCurrent(&window);
//Glew context creation
GLEWContext* pCtx = new GLEWContext; //All forwards undefined
//Release context
context.doneCurrent();
return 1;
}
なにか提案を ?GLEW は Qt5.4 で大丈夫ですか?
編集1:
問題は Qt 関連ではないようです。作成された GLEWContext には、前方定義された関数はありません (すべての関数ポインターは未定義です)。レビュー担当者が集中力を失わないように、コードが更新されました。