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

发布于 2024-10-17 15:37:30 字数 480 浏览 13 评论 0原文

在 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”被调用,但我在屏幕上没有看到任何内容。它总是白色的。我应该检查什么?

In IB I placed an NSOpenGLView instance into the window.

I have all of my drawing code inside a custom NSViewController like so:

// MyOpenGLViewController.h

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

// MyOpenGLViewController.m

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

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

Everything is linked up and "drawFrame" gets called but I don't get anything on the screen. It's always white. What should I be checking for?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

我为君王 2024-10-24 15:37:30

通常,一个 NSOpenGLView 的子类并安装一个计时器来更新您的数据模型,如果有任何更改,则绘制更改。控制器不应该进行绘图。苹果有一些关于如何让某些东西正常工作的很好的文档。从 Mac OS X 的 OpenGl 编程指南

我似乎记得在 Interface Builder 中使用 NSOpenGLView 对象的一个​​错误。我总是做的是在您想要视图的位置添加一个通用 NSObject 并将其类设置为您的 NSOpenGLView 子类。

Typically one subclasses NSOpenGLView and installs a timer to update your data model and if anything changes then draw the changes. The controller shouldn't be doing the drawing. Apple has some good documentation on getting something working. Start with the OpenGl Programming Guide for Mac OS X.

I seem to remember a bug with using the NSOpenGLView object in Interface Builder. What I always do is add a generic NSObject where you want the view and set its class to be your NSOpenGLView subclass.

始终不够 2024-10-24 15:37:30

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

Not sure about cocoa, but glClearColor() just sets some state. glClear(GL_COLOR_BUFFER_BIT) will actually clear the framebuffer.

没有心的人 2024-10-24 15:37:30

回答有点晚了,但当我想知道同样的事情并发现这个线程时,我想我应该用一些缺失的位来更新它:P

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

最后,您的 OpenGL 命令需要实际刷新。如果您是单缓冲,则可以使用 glFlush() 来完成此操作;如果您是双缓冲,则可以使用 glSwapAPPLE() 来完成此操作。

A bit late to answer, but as I was wondering the same thing and found out this thread I thought I should update it with some missing bits :P

As someone else mentioned glClearColor() only set an attribute, the actual clear must be done with glClear (note that in addition to the color buffer it can also clear the Z-Buffer, accumulator & stencil).

Finally your OpenGL commands stream need to be actually flushed. This can be done with either glFlush(), if you are single buffered, or glSwapAPPLE() if you are double-buffered.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文