c++ - opengl 项目在 mac 上无法正常工作
问题描述
我正在尝试在 mac 上创建一个非常简单的 qt opengl 项目(在小部件的中心绘制一个点)。以下是我的代码:
- myOpenglWidget.h
//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
//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
解决方案
推荐阅读
- ruby-on-rails-5 - 如何让 WebMock 使用 hash_include 匹配包含特定 XML 数据的正文?
- scala - Shapeless FoldRight 后无法将 HList 转换为元组
- angular - 无法以角度反应形式填充下拉列表
- c++ - 给出一个图 G 找到该图中的所有节点块,使得 node.color 属性 = 特定颜色
- python - 为字符串中的所有非单词字符添加反斜杠
- c++ - 如何使用 emscripten 和 cmake 项目生成位码(.bc 文件)?
- javascript - Javascript:为什么在断点处暂停时参数未定义
- mysql - 是否可以从外部 docker 将确定的 $MYSQL_ROOT_PASS 传递给 MySQL docker?如果有怎么办?
- python - Flask:从查询中下载反应表的按钮
- javascript - 检查图像 URL 是否有效,如果没有获取新 URL 以添加到功能