Using glad in Qt: QOpenGL and glad are conflicting

598 Views Asked by At

QT version: 5.12.0

OpenGL version: 4.5 core

Development environment: VS 2017

pro file:

QT += widgets
...

I have already add the glad.c file into my project, and ensure that the glad.h is included at the first place in every file.

But while I compile my project, all the other classes that using OpenGL functions are normal, except the class inherited from QOpenGLWidget.

MappingView.h

#include <glad/glad.h>
...
class MappingView : public QOpenGLWidget {
    Q_OBJECT

public:
    MappingView(QWidget * parent = nullptr);
    ~MappingView();

    virtual void initializeGL();
    virtual void resizeGL(int w, int h);
    virtual void paintGL();
    ...
    GLuint m_pointer_texture;
}

MappingView.cpp

MappingView::MappingView(QWidget * parent) : QOpenGLWidget(parent) {
    
}

MappingView::~MappingView() {
    glDeleteTextures(1, &m_pointer_texture);
}

void MappingView::initializeGL() {
    // load glad
    if (!gladLoadGL()) {
        return;
    }

    glGenTextures(1, &m_pointer_texture);
}

Compile error: C3861, cann't find glDeleteTextures.

When I click to the definition of glDeleteTextures in VS, it will jump to QOpenGLFunctions, but not glad.h. It seems that the OpenGL in QT and glad is conflicting. But my project doesn't use QOpenGLFunctions.

When I try to add a macro in MappingView.h,

#define QT_NO_OPENGL

all OpenGL functions in MappingView can be successfully found in glad.h, but the base class QOpenGLWidget cannot be found instead, which means that the MappingView class cannot be inherited from QOpenGLWidget any more.

I would be very appreciated if somebody could help me to resolve the problem, thanks!

0

There are 0 best solutions below