2017-05-31 81 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, 。