2017-11-05 3 views
6

Ich möchte einen NSOpenGLPixelBuffer für Offscreen-Rendering erstellen. Im Moment kann ich es überhaupt nicht einleiten. Hier ist der Code:Erstellen eines Pixelpuffers 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); 

Ich habe versucht, mit Pixel-Format und Breite Geige, Höhe, aber nichts scheint zu funktionieren. Ich bekomme für den pixBuf immer nil. Ich benutze Xcode 9 auf MacOS 10.13. Es sagt, der NSOpenGLPixelBuffer ist veraltet, aber es sollte immer noch funktionieren, oder?

Antwort

5

NSOpenGLPixelBuffer hat deprecated since OS X Lion gewesen, die sich dates back to 2011. Kein Wunder, dass Sie nil bekommen.

Here Apple einen neuen Ansatz zur Zeichnung in Texturen schlagen:

Schließlich ist zu beachten, dass die Gesamtheit der NSOpenGLPixelBuffer Klasse sollte als veraltet angesehen werden. Verwenden Sie IOSurface in Verbindung mit GL framebuffer objects als Ersatz.

Siehe this example, um zu verstehen, wie es sein muss.

+0

So scheint es, dass die alte API einfach nicht funktionieren wird. Ich arbeitete tatsächlich an einem Altsystem mit dem obigen Code. Wie auch immer, danke für die Köpfe hoch; Ich werde in das Beispiel schauen und versuchen, damit zu arbeiten. – alDiablo

2

Könnte Hilfe folgenden Code sein. Sie ersetzen GL_TEXTURE_2D zu diesem 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

Versucht. Hat nicht funktioniert. – alDiablo

Verwandte Themen