0

プロジェクトを 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 には、前方定義された関数はありません (すべての関数ポインターは未定義です)。レビュー担当者が集中力を失わないように、コードが更新されました。

4

2 に答える 2

0

あなたは実際にそれについて警告を受けるはずです:

#警告 qopenglfunctions.h は GLEW と互換性がありません。GLEW 定義は未定義になります

#warning Qt で GLEW を使用するには、glew.h の後に or を含めないでください。

「qopenglcontext.h」には . あなたの質問に答えるには、Qt + GLEW を使用できますが、Qt-opengl と GLEW を簡単に混同することはできません。

于 2015-03-18T13:42:10.287 に答える