0

QCRenderer を次のように初期化します。

let glPFAttributes:[NSOpenGLPixelFormatAttribute] = [
    UInt32(NSOpenGLPFABackingStore),
    UInt32(0)
]
let glPixelFormat = NSOpenGLPixelFormat(attributes: glPFAttributes)
if glPixelFormat == nil {
    println("Pixel Format is nil")
    return
}
let openGLView = NSOpenGLView(frame: glSize, pixelFormat: glPixelFormat)
let openGLContext = NSOpenGLContext(format: glPixelFormat, shareContext: nil)
let qcRenderer = QCRenderer(openGLContext: openGLContext, pixelFormat: glPixelFormat, file: compositionPath)

コードのさらに下では、次のように renderAtTime を呼び出します。

if !qcRenderer.renderAtTime(frameTime, arguments: nil) {
    println("Rendering failed at \(frameTime)s.")
    return
}

常に次のエラー メッセージが生成されます。

2014-10-30 15:30:50.976 HQuartzRenderer[3996:692255] *** Message from <QCClear = 0x100530590 "Clear_1">:
OpenGL error 0x0506 (invalid framebuffer operation)
2014-10-30 15:30:50.976 HQuartzRenderer[3996:692255] *** Message from <QCClear = 0x100530590 "Clear_1">:
Execution failed at time 0.000
2014-10-30 15:30:50.976 HQuartzRenderer[3996:692255] *** Message from <QCPatch = 0x100547860 "(null)">:
Execution failed at time 0.000
Rendering failed at 0.0s.

Quartz コンポジションは、Quartz Composer で問題なく動作するシンプルな GLSL シェーダーです。以下は、Quartz Composer ウィンドウのスクリーンショットです。クォーツ組成

私が見つけることができるこれについては、インターネット上にはあまりありません。ここに誰かが何かを知っていることを願っています。

ちなみに、QCRendererを次のように初期化できることは知っています

let qcRenderer = QCRenderer(offScreenWithSize: size, colorSpace: CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB), composition: qcComposition)

しかし、GPU のマルチサンプリング機能を利用して、アンチエイリアス処理された画像を取得したいと考えています。これは、4 倍のサイズでレンダリングしてから手動で画像を縮小するよりもパフォーマンスが向上するはずです。

編集:ピクセル形式をに変更

let glPFAttributes:[NSOpenGLPixelFormatAttribute] = [
    UInt32(NSOpenGLPFAAccelerated),
    UInt32(NSOpenGLPFADoubleBuffer),
    UInt32(NSOpenGLPFANoRecovery),
    UInt32(NSOpenGLPFABackingStore),
    UInt32(NSOpenGLPFAColorSize), UInt32(128),
    UInt32(NSOpenGLPFADepthSize), UInt32(24),
    UInt32(NSOpenGLPFAOpenGLProfile),
    UInt32(NSOpenGLProfileVersion3_2Core),
    UInt32(0)
]
4

0 に答える 0