如何在OS X Sierra中使用CMAKE进行OpenGL QT 5.8



我刚刚尝试使用QT 5.8设置项目,以在OS X Sierra中进行openGL工作。在这里,您可以看到我的主要CMakelists

cmake_minimum_required (VERSION 3.8)
set (PROJECT_NAME "FluidEngine")
project (${PROJECT_NAME})
set (CMAKE_PREFIX_PATH "/Users/BRabbit27/Qt/5.8/clang_64")
set (CMAKE_AUTOMOC ON)
find_package (Qt5Widgets)
find_package (Qt5Gui)
find_package (Qt5OpenGL)
set (CPP_SOURCES "")
set (HPP_SOURCES "")
set (INCLUDE_PATHS "")
add_subdirectory (src)
include_directories (${INCLUDE_PATHS} ${OPENGL_INCLUDE_DIRS})
add_executable (${PROJECT_NAME} ${CPP_SOURCES} ${HPP_SOURCES})
target_link_libraries (${PROJECT_NAME} Qt5::Widgets Qt5::Gui Qt5::OpenGL )

它完美地配置了Xcode项目,没有错误。然后我用于渲染基本三角形的代码看起来像:

GLWindow::GLWindow(QWidget* parent) : QOpenGLWidget(parent)
{}
void GLWindow::initializeGL()
{
    initializeOpenGLFunctions();
    GLfloat verts[] =
    {
      0.f, 1.f,
     -1.f, -1.f,
      1.f, -1.f
    };
    GLuint myBufferID;
    glGenBuffers(1, &myBufferID);
    glBindBuffer(GL_ARRAY_BUFFER, myBufferID);
    glBufferData(GL_ARRAY_BUFFER, sizeof(verts), verts, GL_STATIC_DRAW);
    glEnableVertexAttribArray(0);
    glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, 0);
}
void GLWindow::resizeGL(int w, int h)
{
    glViewport(0, 0, w, h);
}
void GLWindow::paintGL()
{
    glDrawArrays(GL_TRIANGLES, 0, 3);
}

我得到的是一个黑色窗口。我从这个视频教程

获得了此代码

我是否缺少CMAKE文件中的某些内容,或者在OS X中使用openGL中的某些内容?由于OS X现在正在推广金属,因此也许必须启用某些东西,但我不知道什么。

我已经尝试设置主函数中使用的OpenGL版本

int main(int argc, char** argv)
{
    QApplication app(argc, argv);
    QSurfaceFormat format;
    format.setVersion(4, 1);
    format.setProfile(QSurfaceFormat::CoreProfile);
    QSurfaceFormat::setDefaultFormat(format);
    GLWindow glwindow;
    glwindow.show();
    return app.exec();
}

有什么想法吗?

update

将项目添加到github,您可以在此处克隆它以在计算机中进行测试。

我构建项目的方式只是cmake -GXcode ..假设我在/path/to/project/build_xcode目录中。

希望这可以帮助您复制,也许可以给我一个线索,了解我可能做错了什么。

我检查了所有错误消息,然后从那里开始找到解决方案。幸运的是,有人已经解决了一个相关问题,并解决了该问题。您可以在此处找到完整的答案OpenGl:Invalid_operation之后glenableVertexattribarray

您在OS X上看到此错误,因为它仅支持OpenGL 核心配置文件,如果您使用的是OpenGL 3.x或更高版本。您的代码不是 符合核心配置文件。您最有可能使用兼容性 Windows上的配置文件。

特别是,核心配置文件需要一个顶点阵列对象(VAO( 为所有与顶点相关的呼叫绑定。所以在打电话之前 glEnableVertexAttribArray()或其他类似功能,您将 需要创建和绑定VAO。

最新更新