作成したNSOpenGlViewのサブクラス化されたバージョンでinit関数を実行しようとしています。
たとえば、以下のコード。
- (id)initWithFrame:(NSRect)frameRect{
NSLog(@"Init function ran");
return self;
}
init関数が実行されたことをコンソールに送信する必要がありますが、送信されません。init関数とinitWithFrame:PixelFormat:関数も作成して、コンソールメッセージがトリガーされたかどうかを確認しましたが、何も起こりませんでした。
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が実際に機能するようにするためです。おそらく、これはInterface Builderで設定できますが、私にはオプションが表示されません。これは、スクロールビュー内にあるが、まだわからないことが原因である可能性があります。