我试图在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
变量才能使其正常工作?
答案 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)
//...
}