如何运行OpenGlView的init函数?

时间:2013-02-23 06:43:45

标签: macos cocoa opengl

我正在尝试让init函数在我创建的NSOpenGlView的子类版本中运行。

例如下面的代码。

- (id)initWithFrame:(NSRect)frameRect{
    NSLog(@"Init function ran");
    return self;
}

它应该发送到控制台,init函数运行但它没有!我已经尝试创建一个init函数和initWithFrame:PixelFormat:函数以查看它们是否触发了任何控制台消息但没有发生任何事情。

我通过将NSOpenGlView拖到界面构建器中的窗口并将其类设置为我的子类版本来创建NSOpenGlView。我的drawrect函数工作正常并绘制一个opengl三角形,所以我知道它正在那个级别上工作。

这是我的全班,以防你好奇

#import <Cocoa/Cocoa.h>
@interface openGLView : NSOpenGLView
- (void) drawRect:(NSRect) bounds;
@end

#import "openGLView.h"
#include <OpenGL/gl.h>

@implementation openGLView
- (id)initWithFrame:(NSRect)frameRect{
    NSLog(@"Init function ran");
    return self;
}
- (void) drawRect:(NSRect) bounds{
    glClearColor(0, 0, 0, 0);
    glClear(GL_COLOR_BUFFER_BIT);
    drawAnObject();
    glFlush();
    NSLog(@"drawRect");
}

static void drawAnObject ()
{
    glColor3f(1.0f, 0.85f, 0.35f);
    glBegin(GL_TRIANGLES);
    {
        glVertex3f(  0.0,  0.6, 0.0);
        glVertex3f( -0.2, -0.3, 0.0);
        glVertex3f(  0.2, -0.3 ,0.0);
    }
    glEnd();
}

@end

我需要这样做的原因是我可以在初始化时返回一个具有32位的新像素格式,以便DEPTH_TEST实际工作。据说你可以在界面构建器中设置它,但对我来说,我没有看到任何选项。这可能是因为它在滚动视图内部但尚未确定。

1 个答案:

答案 0 :(得分:3)

如果您在Interface Builder中创建了视图,则它不会调用- (id)initWithFrame:(NSRect)frame,而是调用- (id)initFromCoder:(NSCoder *)coder