zac*_*caj 1 opengl macos opengl-3 swift
我正在尝试运行一个简单的 OpenGL 程序,但无法让它显示任何内容。我在 Mac 上使用 Swift,尽管我对 Windows 上的 OpenGL 拥有丰富的经验,但我对这两者都不熟悉。程序运行良好(没有 GL 错误或任何内容),但没有任何显示,直到我在 openGL 初始化结束时添加此内容:
var vao:GLuint=0;checkGlError();
glGenVertexArrays(1, &vao);checkGlError();
glBindVertexArray(vao);checkGlError();
Run Code Online (Sandbox Code Playgroud)
然后,一旦我调用 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();
};
Run Code Online (Sandbox Code Playgroud)
然而,这似乎根本没有影响事情。
首先,glBegin (...)在核心配置文件上下文中无效。为此,您将需要一个遗留(非核心)上下文。
现在,由于遗留上下文仅限于 OpenGL 2.1,因此它仅提供GL_APPLE_vertex_array_object. 在 2.1 上下文中,您可以调用glGenVertexArraysAPPLE (...)andglBindVertexArrayAPPLE (...)他们会做同样的事情。
您遇到的问题是,在 OS X 上,无论您获得哪个上下文版本,都链接到相同的框架。这意味着您可以在运行时调用上下文不支持的函数。每当您尝试使用遗留上下文中的 GL 3.2+ 函数时,您都会得到GL_INVALID_OPERATION.
| 归档时间: |
|
| 查看次数: |
1528 次 |
| 最近记录: |