Вы не связывая против любой библиотеки 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
для настройки).
Спасибо, ТАК МНОГО! –
но, на самом деле, оказалось, что нет таких функций, как glShadeModel, glMatrixMode и т. Д. Как это может быть так? Использую ли я старый учебник? –
Эти * * действительно от GL1. И вы не должны использовать их больше. Пройдите через 'QOpenGLFunctions_1_1', если вам это действительно нужно. – peppe