2017-11-05 31 views
6

Chcę utworzyć NSOpenGLPixelBuffer do renderowania poza ekranem. Na razie nawet nie mogę go zainicjować. Oto kod:Tworzenie bufora pikseli 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); 

Próbowałem grać na klawiaturze w pikselach i szerokości, ale nic nie działa. Wielokrotnie otrzymuję zero dla pixBuf. Używam Xcode 9 na MacOS 10.13. Mówi, że NSOpenGLPixelBuffer jest przestarzałe, ale powinno nadal działać, prawda?

Odpowiedz

5

NSOpenGLPixelBuffer został deprecated since OS X Lion, która sama dates back to 2011. Nic dziwnego, że dostajesz nil.

Here, Apple proponują nowe podejście do rysowania na fakturach:

wreszcie zauważyć, że cała klasa NSOpenGLPixelBuffer należy uznać za przestarzałe. Użyj IOSurface w połączeniu z GL framebuffer objects jako zamiennik.

Aby uzyskać informacje o tym, jak powinno być, należy zapoznać się z artykułem this example.

+0

Wygląda więc na to, że stare api po prostu nie zadziałają. Właściwie pracowałem nad starym systemem z powyższym kodem. W każdym razie, dzięki za głowy; Przyjrzę się przykładowi i spróbuję z nim pracować. – alDiablo

2

Może być pomocna po kodzie. zastępujesz GL_TEXTURE_2D tym 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

Próbowałem. Nie działa. – alDiablo

Powiązane problemy