NSOpenGLContext を機能させるのに問題があります。すべてのopenglのもの、リソース、vbosなどを処理する静的オブジェクト(3Dエンジン)があります..
ココア バージョンの場合、次のような NSOpenGLContext を作成します。
- (BOOL) CreateContext
{
[NSOpenGLContext clearCurrentContext];
NSOpenGLPixelFormatAttribute attributes [] =
{
NSOpenGLPFAWindow,
NSOpenGLPFADoubleBuffer,
NSOpenGLPFAAccelerated, // If present, this attribute indicates that only hardware-accelerated renderers are considered.
NSOpenGLPFAPixelBuffer, // If present, this attribute indicates that rendering to a pixel buffer is enabled.
NSOpenGLPFAColorSize, 32,
NSOpenGLPFADepthSize, 24,
NSOpenGLPFAStencilSize, 8,
(NSOpenGLPixelFormatAttribute)nil
};
NSOpenGLPixelFormat* pixelFormat = [[NSOpenGLPixelFormat alloc] initWithAttributes:attributes];
NSOpenGLContext* pContext = [[NSOpenGLContext alloc] initWithFormat: pixelFormat shareContext:nil];
if (pContext)
{
[pContext makeCurrentContext];
m_pOGLContext = pContext;
// Vertical Sync
GLint vblSynch = 0; // disable vsync
[pContext setValues:&vblSynch forParameter:NSOpenGLCPSwapInterval];
glFrontFace(GL_CW);
// Set the clear Color
glClearColor(0, 0, 0, 0);
[pixelFormat release];
return true;
}
[pixelFormat release];
return false;
}
エンジンの初期化後、NSView を作成します。NSView の作成後、prepareOpenGL 関数で、エンジンから NSOpenGLContext メンバーを現在の NSOpenGLContext に設定しました。
- (void) prepareOpenGL
{
m_pOGLContext = [NSOpenGLContext currentContext];
return;
}
次に、NSView の関数 lockFocus で、コンテキストのビューを設定します。
- (void)lockFocus
{
[super lockFocus];
if ([m_pOGLContext view] != self)
{
[m_pOGLContext setView:self];
}
[m_pOGLContext makeCurrentContext];
}
今、描画するときに描画するリソースを取得できません。バッファ アーティファクトがたくさんあるだけです。
共有オプションを使用して、NSView の 2 つ目のコンテキストを作成しようとしましたが、同じ結果になりました。