【问题标题】:How to use Cmake for OpenGL + Qt 5.8 in OS X Sierra?如何在 OS X Sierra 中为 OpenGL + Qt 5.8 使用 Cmake?
【发布时间】:2017-11-01 17:40:40
【问题描述】:

我刚刚尝试为使用 Qt 5.8 的项目设置 CMake,以便在 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);
}

我得到的是一个黑色的窗口。我从this video tutorial得到这个代码

我是否遗漏了我的 cmake 文件中的某些内容或 OS X 中使用 OpenGL 的某些微妙内容?由于 OS X 现在正在推广 Metal,也许必须启用某些东西,但我不知道是什么。

我已经尝试设置主函数中使用的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();
}

有什么想法吗?

更新

已将项目添加到github,您可以clone it here在您的机器上进行测试。

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

希望这可以帮助您重现,也许可以让我知道我可能做错了什么。

【问题讨论】:

    标签: macos qt opengl


    【解决方案1】:

    我检查了所有错误消息,并从那里找到了解决方案。幸运的是,有人已经在 SO 中回复了一个相关的问题并找到了解决该问题的方法。你可以在这里找到完整的答案OpenGL: INVALID_OPERATION following glEnableVertexAttribArray

    简称

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

    具体来说,Core Profile 需要一个顶点数组对象 (VAO) 绑定所有与顶点相关的调用。所以在打电话之前 glEnableVertexAttribArray(),或其他类似功能,您将 需要创建和绑定一个 VAO。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多