我刚刚尝试使用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。