如何从视图控制器对象绘制到NSOpenGLView?

时间:2011-02-14 20:37:13

标签: cocoa opengl nsopenglview

在IB中,我将NSOpenGLView实例放入窗口。

我将所有绘图代码放在自定义NSViewController中,如下所示:

// MyOpenGLViewController.h

@interface MyOpenGLViewController : NSViewController 
{
    IBOutlet NSOpenGLView *glView;  
}

// MyOpenGLViewController.m

-(void)awakeFromNib
{
    [self drawFrame];
}

-(void)drawFrame
{
    [[glView openGLContext] makeCurrentContext];
    glClearColor(0, 0, 0, 1);
}

所有内容都已关联,“drawFrame”被调用但我在屏幕上看不到任何内容。它总是白色的。我应该检查什么?

3 个答案:

答案 0 :(得分:4)

通常一个NSOpenGLView的子类并安装一个计时器来更新您的数据模型,如果有任何更改,则绘制更改。控制器不应该进行绘图。 Apple提供了一些有关工作的好文档。从OpenGl Programming Guide for Mac OS X开始。

我似乎记得在Interface Builder中使用NSOpenGLView对象的一个​​错误。我一直在做的是在你想要视图的地方添加一个通用的NSObject,并将它的类设置为你的NSOpenGLView子类。

答案 1 :(得分:2)

不确定cocoa,但glClearColor()只是设置一些状态。 glClear(GL_COLOR_BUFFER_BIT)实际上会清除帧缓冲区。

答案 2 :(得分:1)

回答有点迟,但是当我想知道同样的事情并发现这个帖子时我觉得我应该用一些遗漏的位来更新它:P

正如其他人提到的那样glClearColor()只设置一个属性,实际的clear必须用glClear完成(注意除了颜色缓冲区外,它还可以清除Z-Buffer,累加器和模板)。

最后,您的OpenGL命令 stream 需要实际刷新。如果你是单缓冲的话,可以使用glFlush(),如果你是双缓冲的话,可以使用glSwapAPPLE()。