我正在尝试一个简单的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();
};
然而,这似乎并没有影响到任何事情。
答案 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上下文来解决这个问题。