2

グラフィックフレームワークのココアラッパーに取り組んでいます。

最終的に物を描くために、私はこれをやっています:

- (void)drawRect:(NSRect)rect
{
 CGContextRef ctx = (CGContextRef)[[NSGraphicsContext currentContext] graphicsPort];
 CGContextDrawImage(ctx, NSRectToCGRect(rect), image);
}

のサブクラス内NSView

Gosu や Irrlicht などの他のフレームワークを調べたところ、NSOpenGL次のような複雑なことを常に行っていることがわかりました。

// Settings, depending on fullscreen or not
NSOpenGLPixelFormatAttribute windowedAttrs[] =
{
 NSOpenGLPFADoubleBuffer,
 NSOpenGLPFAScreenMask,
 (NSOpenGLPixelFormatAttribute)CGDisplayIDToOpenGLDisplayMask(CGMainDisplayID()),
 NSOpenGLPFADepthSize,
 (NSOpenGLPixelFormatAttribute)16,
 (NSOpenGLPixelFormatAttribute)0
};
NSOpenGLPixelFormatAttribute fullscreenAttrs[] =
{
 NSOpenGLPFADoubleBuffer,
 NSOpenGLPFAScreenMask,
 (NSOpenGLPixelFormatAttribute)CGDisplayIDToOpenGLDisplayMask(CGMainDisplayID()),
 NSOpenGLPFAFullScreen,
 NSOpenGLPFADepthSize,
 (NSOpenGLPixelFormatAttribute)16,
 (NSOpenGLPixelFormatAttribute)0
};
NSOpenGLPixelFormatAttribute* attrs = fullscreen ? fullscreenAttrs : windowedAttrs;

// Create pixel format and OpenGL context
ObjRef<NSOpenGLPixelFormat> fmt(
  [[NSOpenGLPixelFormat alloc] initWithAttributes:attrs]);
::context = [[NSOpenGLContext alloc] initWithFormat: fmt.obj() shareContext:nil];

なぜ彼らはそんなことをしているのですか?私の「単純な」方法は大丈夫ですか?

4

1 に答える 1

2

私はryystに同意します。本質的にQuartz2DAPIであるCGContextを使用しています。OpenGLは、複雑な3Dレンダリングに特に適したグラフィックスのもう1つのオプションです。

于 2011-05-09T23:26:49.003 に答える