2012-08-28 91 views
1

我無法獲得NSOpenGLContext的工作。 我有一個靜態對象(3D引擎)辦理所有OpenGL的東西,資源,維也納組織等。NSOpenglContext資源,呈現錯誤

對於可可版本,我創建了一個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 FUNC,我剛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創建第二個上下文,但我有相同的結果。

+0

你刷新使用「MAC方式」緩衝區?我不認爲glFlush()在我之前爲我工作,我不得不使用NSOpenGLContext的flushBuffer。 – TheAmateurProgrammer

+0

嗨,glflush正在爲我工​​作,事實上我第一次使用靜態上下文,沒關係。問題發生在我銷燬視圖的時候,創建另一個再次使用靜態上下文的視圖。 – Ziggy

回答

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 
};