Qt OpenGL - jak korzystać z funkcji QOpenGLFunctions_X_X

0

Witam,

Chciałbym napisać prostą aplikację w Qt 5.5.0 i OpenGL 3.0. Napisałem program na bazie dokumentacji Qt korzystający z klasy QOpenGLFunctions (która de facto zawiera funkcje z ES) poprzez dziedziczenie po tej klasie. Gdy jednak chcę dziedziczyć po np. QOpenGLFunctions_3_0 mam błędy segmentacji pamięci.

Spróbowałem innego podejścia - w metodzie inicjalizacji dopisałem taki kod:

QOpenGLVersionProfile prof;
        prof.setVersion(3,0);
        prof.setProfile(QSurfaceFormat::CoreProfile);
        m_func = (QOpenGLFunctions_3_0*)QOpenGLContext::currentContext()->versionFunctions(prof);
        if ( !m_func )
            {
                qFatal("Requires OpenGL >= 3.0");
                exit( 1 );
            }
        m_func->initializeOpenGLFunctions();

i wydawać by się mogło, że wszystko jest ok bo program się wykonuje. Gdy jednak próbuję dobrać się do jakiejś funkcji z obiektu m_func, np.

unsigned arr;
m_func->glGenVertexArrays(1, &arr);

Znowu mam segmentation fault.

Siedzę na lapku z intel HD graphics ale na bank mam wparcie dla OpenGL 3.0 bo już pisałem aplikacje korzystające np. z glGenVertexArrays tylko w Visual Studio i wszystko działało. Pobrałem nawet program OpenGL Extension Viewer i też mi pokazuje wersję OpenGL 3.1. Nie mam pojęcia dla czego w Qt jest to takie zakombinowane i nie mogę uzyskać głupiego wskaźnika na funkcje. Ktoś pomoże?

0

Nie lepiej byłoby wykorzystać TYPE *QOpenGLContext::versionFunctions() const? Wtedy byś miał:

 
QOpenGLFunctions_3_3_Core *funcs = context->versionFunctions<QOpenGLFunctions_3_3_Core>();
// jeśli funcs = nullptr, no to karta graficzna nie obsługuje OpenGL 3.3.

1 użytkowników online, w tym zalogowanych: 0, gości: 1