如果这个问题是微不足道的或无意义的,我提前道歉......这是我正在开发的第一个应用程序之一。(不幸的是)我不是开发人员。
我有一个 NSWindow,其中包含一个自定义视图,它是NSOpenGLView
.
由于NSWindow
和NSOpenGLView
是通过 Interface Builder 创建的,因此我init
既不需要NSOpenGLContext
也不需要NSOpenGLPixelFormat
.
我最近切换到 OS X Lion,现在我想利用新的 OpenGL 3.2。
从 Apple 文档中,我发现要启用 OpenGL 3.2,我只需要编写如下内容:
NSOpenGLPixelFormatAttribute pixelFormatAttributes[] =
{
NSOpenGLPFAOpenGLProfile, NSOpenGLProfileVersion3_2Core,
0
};
NSOpenGLPixelFormat *pixelFormat = [[[NSOpenGLPixelFormat alloc] initWithAttributes:pixelFormatAttributes] autorelease];
NSOpenGLContext* openGLContext = [[[NSOpenGLContext alloc] initWithFormat:pixelFormat shareContext:nil] autorelease];
在初始化NSOpenGLContext
.
这很容易(即使对我来说也是如此),但我怎么能在我的应用程序中实现它,因为我从来没有init
NSOpenGLContext
?
由于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];
}
并且 OpenGL 3.2 已按照报告正确加载,glGetString(GL_VERSION)
但创建的上下文不再与应用程序交互...视图中没有绘制任何内容..
我尝试了我所知道的一切......但我无法解决这个问题。
我应该怎么做呢?