2013-04-02 2 views
3

Я пытаюсь изменить образец Apple MultiGPUIOSurface (в частности, файл http://developer.apple.com/library/mac/#samplecode/MultiGPUIOSurface/Listings/ServerOpenGLView_m.html), чтобы сторона сервера отображалась на IOSurface без необходимости в NSOpenGLView.рендеринг на IOSurface без NSOpenGLView

Модифицированная версия: http://pastebin.com/z3r715jJ Разница в моем подходе заключается в том, что я визуализирую IOSurface на основе таймера, а не в drawRect. Я также не использую контекст NSOpenGlView.

Проблема в том, что я вижу поврежденный вид IOSurface в клиентском приложении. Однако, если я настрою контекст NSOpenGLView на тот, который я создал, или используйте контекст из NSOpenGLView, он работает. Это заставляет меня думать, что NSOpenGLView делает что-то дополнительное, что мне также нужно делать, но я не уверен, что.

ответ

1

Обнаружено решение (хотя я не понимаю, почему): Создайте пиксельный буфер.

Я нашел обсуждение закадровый буферов и необходимость растяжимой (http://www.mentby.com/Group/mac-opengl/opengl-offscreen-rendering-without-a-window.html)

В любом случае, мое исправление было добавление строки:

 NSOpenGLPixelBuffer* pbuf = [[NSOpenGLPixelBuffer alloc] initWithTextureTarget:GL_TEXTURE_RECTANGLE_EXT textureInternalFormat:GL_RGBA textureMaxMipMapLevel:0 pixelsWide:512 pixelsHigh:512]; 

    [_nsContext setPixelBuffer:pbuf cubeMapFace:0 mipMapLevel:0 currentVirtualScreen:[_nsContext currentVirtualScreen]]; 
Смежные вопросы