我试图让 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 实际工作。假设您可以在界面生成器中设置它,但对我来说,我没有看到任何选项。这可能是因为它在滚动视图内但还不确定。