顶点数组Objcects - OSX上的glGenVertexArrays GL_INVALID_OPERATION

时间:2014-12-02 23:39:14

标签: macos opengl swift opengl-3

我正在尝试一个简单的OpenGL程序,但我不能让它显示任何东西。我在Mac上使用Swift,我都不熟悉,虽然我在Windows上有很多OpenGL经验。程序运行正常(没有GL错误或任何东西),但没有显示,直到我在openGL初始化结束时添加它:

var vao:GLuint=0;checkGlError();
glGenVertexArrays(1, &vao);checkGlError();
glBindVertexArray(vao);checkGlError();

然后,一旦我调用glGenVertexArrays(),它就会给出GL_INVALID_OPERATION,但是文档没有提到它作为一个选项。

我担心我可能没有GL3上下文(实际上我更喜欢只有GL1 / 2上下文,但是Swift标题似乎缺少像glBegin()和glColor3f()这样的东西,所以我决定为了解决GL3),所以我试图手动请求一个:

required init?(coder: NSCoder) {
    super.init(coder: coder);
    let attribs=[NSOpenGLPFAOpenGLProfile,NSOpenGLProfileVersion3_2Core,0];
    pixelFormat=NSOpenGLPixelFormat(attributes: UnsafePointer<NSOpenGLPixelFormatAttribute>(attribs));
    openGLContext=NSOpenGLContext(format: pixelFormat, shareContext: nil);
    openGLContext.view=self;
    openGLContext.makeCurrentContext();
};

然而,这似乎并没有影响到任何事情。

2 个答案:

答案 0 :(得分:3)

首先,glBegin (...)在核心配置文件上下文中无效。您将需要一个遗留(非核心)上下文。

现在,由于遗留上下文仅限于OpenGL 2.1,因此它只提供GL_APPLE_vertex_array_object。在2.1环境中,您可以致电glGenVertexArraysAPPLE (...)glBindVertexArrayAPPLE (...),他们也会做同样的事情。

您遇到的问题是,在OS X上,无论您获得哪种上下文版本,都可以链接到同一框架。这意味着您可以在运行时调用上下文不支持的函数。每次尝试使用旧版上下文中的GL 3.2+函数时,都会得到GL_INVALID_OPERATION

答案 1 :(得分:0)

我能够通过创建一个桥接头并在其中包含#include,然后使用GL1上下文来解决这个问题。