NSOpenglContext资源,渲染不正确

时间:2012-08-28 12:51:45

标签: macos opengl nsopenglview

我无法让NSOpenGLContext正常工作。 我有一个静态对象(3D引擎),可以处理所有opengl的东西,资源,vbos等。

对于cocoa版本,我创建了一个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创建第二个Context,但我的结果相同。

1 个答案:

答案 0 :(得分: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
};