3

如果这个问题是微不足道的或无意义的,我提前道歉......这是我正在开发的第一个应用程序之一。(不幸的是)我不是开发人员。

我有一个 NSWindow,其中包含一个自定义视图,它是NSOpenGLView.

由于NSWindowNSOpenGLView是通过 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)但创建的上下文不再与应用程序交互...视图中没有绘制任何内容..

我尝试了我所知道的一切......但我无法解决这个问题。

我应该怎么做呢?

4

3 回答 3

4

NSOpenGLView 有一个 setOpenGLContext 方法。以这种方式将您的 3.2 上下文传递给视图,然后在 NSOpenGLContext 上调用 setView 。

我没有对此进行测试,但它应该可以工作,尽管我只是制作了自己的 OpenGL 视图。

于 2011-09-23T12:31:05.227 回答
1

听起来您的代码是基于 OpenGL 2.1 的。Lion 中的 OpenGL 3.2 仅支持核心配置文件(没有兼容性配置文件),这意味着所有固定功能管道的东西(例如 glBegin/End、glVertex、glPushMatrix、glMultMatrix)都已消失。

您必须非常更新您的代码。如果您已经使用 VBO,工作量会减少。

于 2011-10-09T08:43:59.290 回答
0

在我的子类的 awakeFromNib 中使用 [setPixelFormat ...] 对我有用,尽管它让我感到不舒服,因为文档中没有任何内容承诺它应该这样做。

此覆盖是 Interface Builder 中的任何设置。我看不到检查像素格式以将我需要的像素格式添加到 Interface Builder 中选择的像素格式的不被弃用的方法。

希望 IB 人员将它添加到那里,或者更好的是 NSOpenGLView 类将产生子类的机制

于 2012-01-10T03:11:29.870 回答