2016-01-21 3 views
-1

Попытка узнать, как использовать QGLWidget, но уже так много времени потрачено на обработку этих ошибок. Я даже не понимаю их. Я googled, но ничего. Пожалуйста, любые предложения?Qt OpenGL error '_imp_gl ...'

Код: https://gist.github.com/anonymous/77c57fde631c77810775

In function `ZN6Widget12initializeGLEv': 
undefined reference to `[email protected]' 
undefined reference to `[email protected]' 
and more... 

ответ

1

Вы не связывая против любой библиотеки GL.

Начиная с Qt 5.5, на Windows, по умолчанию, Qt не связывает с libGL, но имеет механизм выполнения для принятия решения, чтобы загрузить либо libGL или УГЛА (в зависимости от ваших возможностей ОС). Это означает, что вы не можете просто использовать glFoo - вы получите ошибки связи.


Решение: пройти через функции резольверами, например QOpenGLFunctions:

QOpenGLFunctions *f = QOpenGLContext::currentContext()->functions(); 
f->glEnable(GL_FOOBAR); 
f->glDrawArrays(...); 

Обратите внимание, что на Windows, вам нужна функция резольверы так или иначе использовать любую функцию OpenGL введенную после 1.1.

Кроме того, если вы используете ES2 или только Desktop GL-только функции, вы должны заставить Qt загрузить правильную реализацию GL:

int main(int argc, char **argv) { 
    // *before* creating it 
    QApplication::setAttribute(Qt::AA_UseDesktopOpenGL); 
    QApplication app(argc, argv); 

More info here.

(Более радикальное решение: перекомпилируйте Qt, пройдите -opengl desktop или -opengl es2 для настройки).

+0

Спасибо, ТАК МНОГО! –

+0

но, на самом деле, оказалось, что нет таких функций, как glShadeModel, glMatrixMode и т. Д. Как это может быть так? Использую ли я старый учебник? –

+0

Эти * * действительно от GL1. И вы не должны использовать их больше. Пройдите через 'QOpenGLFunctions_1_1', если вам это действительно нужно. – peppe