Swift 需要不可配置指针的函数<;类型>;!

Swift 需要不可配置指针的函数<;类型>;!,swift,cocoa,opengl,Swift,Cocoa,Opengl,我正在尝试使用OpenGL按照(用Objective-C编写的)命令渲染屏幕外图像。我创建了一个简单的Cocoa CLI项目,并在main.swift文件中添加了此代码作为入门,但我无法编译它: import Foundation import AGL var framebuffer: GLuint glGenFramebuffersEXT(1, &framebuffer) 通过这段代码,我从编译器中得到以下消息:初始化变量“framebuffer”之前获取的地址 OpenGL函数

我正在尝试使用OpenGL按照(用Objective-C编写的)命令渲染屏幕外图像。我创建了一个简单的Cocoa CLI项目,并在main.swift文件中添加了此代码作为入门,但我无法编译它:

import Foundation
import AGL

var framebuffer: GLuint

glGenFramebuffersEXT(1, &framebuffer)
通过这段代码,我从编译器中得到以下消息:
初始化变量“framebuffer”之前获取的地址

OpenGL函数的签名是
func-glGenFramebuffersEXT(\n:GLsizei,\uframebuffers:UnsafeMutablePointer!)


尝试使用
var framebuffer:GLuint=0
时,程序会崩溃


我应该如何初始化
framebuffer
变量才能使其工作?

所有OpenGL API都需要在特定的OpenGL渲染上下文中运行。 我在macOS上使用OpenGL的尝试不多,但这段代码运行时不会崩溃:

import OpenGL.GL
import AppKit

let attributes: [NSOpenGLPixelFormatAttribute] = [
    NSOpenGLPFAAllRenderers,
    NSOpenGLPFAAllowOfflineRenderers,
    //...
    0 //terminator
].map{NSOpenGLPixelFormatAttribute($0)}
if
    let format = NSOpenGLPixelFormat(attributes: attributes),
    let context = NSOpenGLContext(format: format, share: nil)
{
    context.makeCurrentContext()

    var framebuffer: GLuint = 0 //<- this is the right way to work with `UnsafeMutablePointer<GLuint>`.
    glGenFramebuffers(1, &framebuffer)
    //...
}
导入OpenGL.GL
导入应用程序包
let属性:[NSOpenGLPixelFormatAttribute]=[
NSOpenGLPFAALLRenders,
NSOPENGLPFAALLOWFFLINERENDERS,
//...
0//终止符
].map{nsopenglpixelformattribute($0)}
如果
let format=NSOpenGLPixelFormat(属性:属性),
let context=NSOpenGLContext(格式:format,共享:nil)
{
context.makeCurrentContext()

就类型系统而言,var-framebuffer:GLuint=0/
var-framebuffer:GLuint=0
将是正确的方法。我对函数了解不够,不知道它期望什么样的值。您是对的,我误解了文档,认为屏幕外渲染不需要渲染上下文。@iamdto,in事实上,我已经重读了苹果公司的文档好几次了,即使我们进行屏幕外渲染,也不清楚我们是否需要一些渲染上下文。也不清楚创建屏幕外渲染上下文的最佳方法是什么。最好用苹果公司的文档写一份改进请求。