2017-05-31 80 views
0

我只是试图为使用Qt 5.8的项目设置CMake来在OS X Sierra中执行OpenGL。在这里你可以看到我的主CMakeLists如何在OS X Sierra中使用Cmake for OpenGL + Qt 5.8?

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,所以可能必须启用某些功能,但我不知道该怎么做。

我已经尝试设置在主函数

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(); 
} 

任何想法,使用了OpenGL的版本?

UPDATE

新增项目github上,你可以clone it here在你的机器上测试。

我建项目的方法就是cmake -GXcode ..假设我在/path/to/project/build_xcode目录。

希望这可以帮助你重现,也许给我什么,我可能做错了一个线索。

回答

0

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

完整的答案对于短

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

具体地,核心配置文件需要一个顶点数组对象(VAO)至 约束所有顶点相关的调用。所以在致电 glEnableVertexAttribArray()或其他类似的功能之前,您需要创建并绑定一个VAO, 。