【发布时间】:2014-12-27 12:47:10
【问题描述】:
我正在尝试将 OpenGL 上下文添加到 NSWindow,但由于某种原因它不起作用。 当我运行应用程序时,它会正确创建并显示 NSWindow,但我无法对 OpenGL 上下文执行任何操作,因此我认为上下文尚未正确添加到 NSWindow。
这是我目前的代码:
import Foundation
import AppKit
import GLKit
let application = NSApplication.sharedApplication()
application.setActivationPolicy(NSApplicationActivationPolicy.Regular)
let window = NSWindow(contentRect: NSMakeRect(0, 0, 640, 480), styleMask: NSTitledWindowMask | NSClosableWindowMask | NSMiniaturizableWindowMask, backing: .Buffered, defer: false)
window.center()
window.title = "Programmatically Created Window"
window.makeKeyAndOrderFront(window)
class WindowDelegate: NSObject, NSWindowDelegate {
func windowWillClose(notification: NSNotification) {
NSApplication.sharedApplication().terminate(0)
}
}
let windowDelegate = WindowDelegate()
window.delegate = windowDelegate
class AppDelegate: NSObject, NSApplicationDelegate {
var window: NSWindow
init(window: NSWindow) {
self.window = window
}
func applicationDidFinishLaunching(notification: NSNotification) {
let glContext = NSOpenGLView()
self.window.contentView.addSubview(glContext)
// let glAttributes: [NSOpenGLPixelFormatAttribute] = [
// UInt32(NSOpenGLPFAAccelerated),
// UInt32(NSOpenGLPFADoubleBuffer),
// UInt32(NSOpenGLPFAColorSize), UInt32(48),
// UInt32(NSOpenGLPFAAlphaSize), UInt32(16),
// UInt32(NSOpenGLPFAMultisample),
// UInt32(NSOpenGLPFASampleBuffers), UInt32(1),
// UInt32(NSOpenGLPFASamples), UInt32(4),
// UInt32(NSOpenGLPFAMinimumPolicy),
// UInt32(0)
// ]
//
// let pixelFormat = NSOpenGLPixelFormat(attributes: glAttributes)
// let glContext = NSOpenGLContext(format: pixelFormat, shareContext: nil)
// self.window.contentView.addSubview(glContext!.view)
// glContext!.view = self.window.contentView as NSView
}
}
let applicationDelegate = AppDelegate(window: window)
application.delegate = applicationDelegate
application.activateIgnoringOtherApps(true)
application.run()
glClearColor(0, 0, 0, 0)
【问题讨论】:
-
我没有看到您创建 NSOpenGLView 的任何地方。在某个地方,您应该有一个子类 NSOpenGLView 的类,您可以在其中进行初始化(-(id)initWithFrame:(NSRect)frameRect)和准备(-(void)prepareOpenGL)。 NSOpenGLView 也有一个 initWithFrame:pixelFormat:initializer。应该将 OpenGLView 添加为子视图。
标签: opengl swift glkit openglcontext