3

如果這個問題很微不足道或者是無稽之談,我很抱歉...這是我正在開發的第一個應用程序之一。 (Unfortunatley)我不是開發者。NSOpenGLView與OpenGL 3.2核心

我有一個NSWindow,其中包含一個自定義視圖,它是NSOpenGLView的子類。

由於NSWindowNSOpenGLView通過Interface Builder中創建的,我不需要init既不NSOpenGLContext也不NSOpenGLPixelFormat

我最近切換到OS X Lion,現在我想要利用新的OpenGL 3.2。

從蘋果的文檔,我發現,要啓用OpenGL 3.2我只需寫類似:初始化NSOpenGLContext

NSOpenGLPixelFormatAttribute pixelFormatAttributes[] = 
    { 
     NSOpenGLPFAOpenGLProfile, NSOpenGLProfileVersion3_2Core, 
     0 
    }; 

    NSOpenGLPixelFormat *pixelFormat = [[[NSOpenGLPixelFormat alloc] initWithAttributes:pixelFormatAttributes] autorelease]; 
    NSOpenGLContext* openGLContext = [[[NSOpenGLContext alloc] initWithFormat:pixelFormat shareContext:nil] autorelease]; 

這是很容易的(甚至對我來說),但我怎麼能實現這個在我的應用程序,因爲我從來沒有initNSOpenGLContext

由於NSOpenGLView是從Interface Builder創建的,所以方法-initWithFormat:shareContext:不會被調用。

所以我試着像這樣的東西覆蓋-initWithCoder:方法:

-(id)initWithCoder:(NSCoder *)aDecoder 
{ 
NSOpenGLPixelFormatAttribute pixelFormatAttributes[] = 
    { 
     NSOpenGLPFAOpenGLProfile, NSOpenGLProfileVersion3_2Core, 
     0 
    }; 

    NSOpenGLPixelFormat *pixelFormat = [[[NSOpenGLPixelFormat alloc] initWithAttributes:pixelFormatAttributes] autorelease]; 
    NSOpenGLContext* openGLContext = [[[NSOpenGLContext alloc] initWithFormat:pixelFormat shareContext:nil] autorelease]; 
    [super initWithCoder:aDecoder]; 
    [self setOpenGLContext:openGLContext]; 
    [openGLContext makeCurrentContext]; 
} 

,並通過glGetString(GL_VERSION)的報道,但在創建上下文不再與應用程序交互的OpenGL 3.2是否正確裝入......沒有什麼是在視圖中繪製..

我試過我所知道的一切......但我無法解決這個問題。

我應該怎麼做呢?

回答

1

聽起來你的代碼是基於OpenGL 2.1的。 Lion中的OpenGL 3.2只支持核心配置文件(沒有兼容性配置文件),這意味着所有固定功能管道的東西(例如glBegin/End,glVertex,glPushMatrix,glMultMatrix)都已經沒有了。

你必須非常更新你的代碼。如果您已經使用VBO,工作將會減少。

4

NSOpenGLView有一個setOpenGLContext方法。然後將你的3.2上下文傳遞給視圖,然後在NSOpenGLContext上調用setView。

我還沒有測試過這個,但它應該工作,雖然我只是做了我自己的OpenGL視圖。

0

在我的子類的awakeFromNib中使用[setPixelFormat ...]正在爲我工​​作,雖然它讓我感到不舒服,因爲文檔中沒有任何東西承諾它應該。

此重寫的界面生成器的任何設置。我看不到一種不被棄用的方式來檢查像素格式,以便將我需要的像素格式添加到Interface Builder中選定的像素格式中。

希望IB的人會在那裏添加它,或者更好的是NSOpenGLView類將爲子類創建一個機制,以便於f