首页 > 解决方案 > opengl 项目在 mac 上无法正常工作

问题描述

我正在尝试在 mac 上创建一个非常简单的 qt opengl 项目(在小部件的中心绘制一个点)。以下是我的代码:

//myopenglwidget.h
#ifndef MYOPENGLWIDGET_H
#define MYOPENGLWIDGET_H
 
#include <QOpenGLWidget>
#include <QOpenGLFunctions>
class QOpenGLShaderProgram;
 
class MyOpenGLWidget : public QOpenGLWidget, protected QOpenGLFunctions
{
    Q_OBJECT
 
public:
    explicit MyOpenGLWidget(QWidget *parent = 0);
 
protected:
    void initializeGL() override;
    void paintGL() override;
    void resizeGL(int width, int height) override;
 
private:
    QOpenGLShaderProgram *program;
};
 
#endif // MYOPENGLWIDGET_H
//myopenglwidget.cpp
#include "myopenglwidget.h"
#include <QOpenGLShaderProgram>
 
MyOpenGLWidget::MyOpenGLWidget(QWidget *parent)
    : QOpenGLWidget(parent)
{
}
 
void MyOpenGLWidget::initializeGL()
{
    initializeOpenGLFunctions();
 
    // Create vertex shader
    QOpenGLShader *vshader = new QOpenGLShader(QOpenGLShader::Vertex, this);
    const char *vsrc =
            "void main() {                             \n"
            "   gl_Position = vec4(0.0, 0.0, 0.0, 1.0);\n"
            "}                                         \n";
    vshader->compileSourceCode(vsrc);

    // Create fragment shader
    QOpenGLShader *fshader = new QOpenGLShader(QOpenGLShader::Fragment, this);
    const char *fsrc =
            "void main() {                              \n"
            "   gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n"
            "}                                          \n";
    fshader->compileSourceCode(fsrc);
 
    // create shader
    program = new QOpenGLShaderProgram;
    program->addShader(vshader);
    program->addShader(fshader);
    program->link();
    program->bind();
}
 
void MyOpenGLWidget::resizeGL(int , int )
{
}
 
void MyOpenGLWidget::paintGL()
{
    //draw
    glDrawArrays(GL_POINTS, 0, 1);
}
//main.cpp
#include <QApplication>
#include "myopenglwidget.h"
 
int main(int argc, char *argv[])
{
    QApplication app(argc,argv);
    MyOpenGLWidget w;
    w.resize(400, 300);
    w.show();
    return app.exec();
}

我在windows上试过了,效果很好。但是,当我在 mac 上的 Qt creator 上编写相同的代码时,它向我显示的只是一个空白的黑色窗口。我知道 Apple 已经开始停止支持 opengl,但不知道这是否与我的问题有关。我想知道是否可以以这种方式使用着色器使其在mac上工作?

我的mac版本是MAC OSX 10.15

标签: c++macosqtopengl

解决方案


推荐阅读