NSOpenGLView удаляет свой NSOpenGLContext на macOS 10.9 - PullRequest
0 голосов
/ 26 февраля 2019

Класс NSOpenGLView имеет свойство чтения / записи openGLContext, и, как я читаю документацию, получатель никогда не должен возвращать nil:

Если у получателя нет связанного объекта контекста,новый объект NSOpenGLContext создан.Новый объект инициализируется с информацией о формате пикселя получателя.

В macOS 10.13 это кажется правдой, но в macOS 10.9 он возвращает nil после того, как я добавляю представление в окно.То есть, если я сделаю это:

NSOpenGLView* glView = [[NSOpenGLView alloc]
    initWithFrame: NSMakeRect( 0.0, 0.0, 100.0, 100.0 )
    pixelFormat: [NSOpenGLView defaultPixelFormat]];
NSLog(@"Pixel format %@, context %@", glView.pixelFormat, glView.openGLContext );

[self.host addSubview: glView];
NSLog(@"Pixel format %@, context %@", glView.pixelFormat, glView.openGLContext );

Затем во втором журнале контекст будет нулевым.Есть ли какое-нибудь исправление?Создание собственного NSOpenGLContext и назначение его не помогает.Я убедился, что представление хоста является частью окна и что windowNumber является положительным.

1 Ответ

0 голосов
/ 27 февраля 2019

По-видимому, в Mavericks нужно установить представление контекста, а также установить контекст представления.Примерно так работает:

NSOpenGLPixelFormat* pf = [NSOpenGLView defaultPixelFormat];

NSOpenGLView* glView = [[[NSOpenGLView alloc]
    initWithFrame: NSMakeRect( 0.0, 0.0, 100.0, 100.0 )
    pixelFormat: pf] autorelease];

NSOpenGLContext* glc = [[[NSOpenGLContext alloc]
    initWithFormat: glView.pixelFormat shareContext: nil] autorelease];

[self.host addSubview: glView];

glc.view = glView; // the key step I was missing
glView.openGLContext = glc;
NSLog(@"Pixel format %@, context %@", glView.pixelFormat, glView.openGLContext );
...