需要UnsafeMutablePointer <type>的函数!

时间:2017-02-25 09:35:54

标签: swift cocoa opengl

我试图在Apple documentation之后使用OpenGL渲染屏幕外图像(用Objective-C编写)。我已经创建了一个简单的Cocoa CLI项目,并在main.swift文件中添加了这段代码,但我无法编译它:

import Foundation
import AGL

var framebuffer: GLuint

glGenFramebuffersEXT(1, &framebuffer)

使用此代码,我从编译器获得以下消息:Address of variable 'framebuffer' taken before it is initialized

OpenGL函数的签名是func glGenFramebuffersEXT(_ n: GLsizei, _ framebuffers: UnsafeMutablePointer<GLuint>!)

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

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

1 个答案:

答案 0 :(得分:0)

所有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)
    //...
}