2016-09-04 4 views
1

Я использую Qt creator ide и Qt 5.7 framework для своей программы. И у меня есть виджет в моей форме. Этот виджет контролируется opengl. Чтобы быть более конкретным, я хочу рисовать фигуры с opengl на этом виджете. Но я не могу использовать glGenVertexArrays, glBindVertexArray. я получил эти ошибки:Qt Creator Qt 5.7 OpenGL Функции не найдены

'glGenVertexArrays': identifier not found 
'glBindVertexArray': identifier not found 

glwidget.h:

#ifndef GLWIDGET_H 
#define GLWIDGET_H 

#include <QOpenGLWidget> 
#include <QOpenGLFunctions> 

class GLWidget : public QOpenGLWidget, protected QOpenGLFunctions 
{ 
    Q_OBJECT 
public: 
    explicit GLWidget(QWidget *parent); 

protected: 
    void initializeGL() Q_DECL_OVERRIDE; 
    void paintGL() Q_DECL_OVERRIDE; 
    void resizeGL(int w, int h) Q_DECL_OVERRIDE; 
}; 

#endif // GLWIDGET_H 

glwidget.cpp

#include "glwidget.h" 

GLWidget::GLWidget(QWidget *parent) : QOpenGLWidget(parent) 
{ 

} 

void GLWidget::initializeGL() { 
    initializeOpenGLFunctions(); 
    glClearColor(0, 0, 0, 1); 
} 

void GLWidget::paintGL() { 
    GLuint VertextArrayID; 
    glGenVertexArrays(1, &VertextArrayID); 
    glBindVertexArray(VertextArrayID); 
} 

void GLWidget::resizeGL(int w, int h) { 

} 

.pro файл

QT  += core gui opengl 

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets 

TARGET = QtOpenGLTest 
TEMPLATE = app 

LIBS += -lOpenGL32 
SOURCES += main.cpp\ 
     mainwindow.cpp \ 
    glwidget.cpp 

HEADERS += mainwindow.h \ 
    glwidget.h 

FORMS += mainwindow.ui 

ответ

4

вершинных массивов, связанные с функциями являются не в, как класс направлен на общее подмножество OpenGL 2.1 (+ FBO) и OpenGL ES 2.

Они доступны другими способами:

  • QOpenGLExtraFunctions (направленный на GL 3.x + расширений/ES 3.й)
  • QOpenGLVertexArrayObject (обертка класс для функциональности)
  • QOpenGLExtension_ARB_vertex_array_object (который только обертка соответствующего расширения. Это не будет работать на ES 2, где вы получили расширение OES_ или на устройствах Apple, где вы получили расширение APPLE_).
+0

Спасибо, я думаю, что это работает. Я изменил защищенный класс на QOpenGLExtraFunctions. И он работает без ошибок. –

+0

спасибо, рад, что этот переключатель был проще, чем я думал, что это будет – ComradeJoecool

Смежные вопросы