2017-11-05 8 views
6

オフスクリーンレンダリング用のNSOpenGLPixelBufferを作成したいとします。今のところ私はそれを初期化することさえできません。コードは次のとおりです:ピクセルバッファの作成Objective-C

NSOpenGLPixelFormatAttribute attribs[] = { 
    NSOpenGLPFAPixelBuffer, 
    NSOpenGLPFANoRecovery, 
    NSOpenGLPFAAccelerated, 
    NSOpenGLPFADepthSize, 24, 
    (NSOpenGLPixelFormatAttribute) 0 
}; 

NSOpenGLPixelFormat* format = [[[NSOpenGLPixelFormat alloc] initWithAttributes:attribs] autorelease]; 
NSOpenGLPixelBuffer* pixBuf = [[NSOpenGLPixelBuffer alloc] 
           initWithTextureTarget: GL_TEXTURE_2D 
           textureInternalFormat: GL_RGBA 
           textureMaxMipMapLevel: 0 
           pixelsWide: 32 
           pixelsHigh: 32]; 

NSLog(@"pbuf address: %p", pixBuf); 

私はピクセルフォーマットと幅、高さを試してみましたが、何も動作していないようです。私はpixBufのために何度も何もしません。 MacOS 10.13でXcode 9を使用しています。 NSOpenGLPixelBufferは廃止予定ですが、まだ動作するはずですよね?

答えて

5

NSOpenGLPixelBuffer、それ自体dates back to 2011deprecated since OS X Lionてきました。あなたがnilを得ているのも不思議ではありません。

Here、Appleはテクスチャへの描画への新しいアプローチを提案する:

は最後にNSOpenGLPixelBufferクラス全体が非推奨と考えるべきであることに注意してください。代わりにGL framebuffer objectsと組み合わせてIOSurfaceを使用してください。

this exampleを参照して、どのようにする必要があるか把握してください。

+0

古いAPIがうまく動作しないようです。私は実際に上記のコードでレガシーシステムに取り組んでいました。とにかく、頭をアップしてくれてありがとう。私はその例を見て、それを使って作業しようとします。 – alDiablo

2

以下のコードを参考にしてください。 GL_TEXTURE_2DをこのGL_TEXTURE_RECTANGLE_EXTに置き換えます。

// Create an OpenGL pixel buffer 
pixBuf = [[NSOpenGLPixelBuffer alloc] initWithTextureTarget:GL_TEXTURE_RECTANGLE_EXT textureInternalFormat:GL_RGBA textureMaxMipMapLevel:0 pixelsWide:32 pixelsHigh:32]; 
NULL_ERROR_EXIT(pixBuf, "Unable to create NSOpenGLPixelBuffer"); 
+0

試しました。うまくいきませんでした。 – alDiablo

関連する問題