1

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 つ目のコンテキストを作成しようとしましたが、同じ結果になりました。

4

1 に答える 1

0

わかりません。私も初心者ですが、フォーマットが間違っていると思います。次のようにする必要があります。

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, 
NSOpenGLPFADepthSize, 
NSOpenGLPFAStencilSize, 
32,24,8,
(NSOpenGLPixelFormatAttribute)nil
};
于 2012-12-03T17:54:59.523 に答える