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。您正在使用 CGContext,它本质上是 Quartz 2D API。OpenGL 是图形的另一种选择,尤其适用于复杂的 3D 渲染。

于 2011-05-09T23:26:49.003 回答