Рисование в NSWindow - PullRequest
       25

Рисование в NSWindow

1 голос
/ 25 апреля 2011

Я работаю над оболочкой какао для графического фреймворка.

Чтобы наконец нарисовать материал, я делаю это:

- (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];

Почему они делают все это?Мой "простой" способ в порядке?

1 Ответ

2 голосов
/ 10 мая 2011

Я согласен с Ryyst. Вы используете CGContext, который по сути является Quartz 2D API. OpenGL - это еще один вариант для графики, особенно подходящий для сложных 3D-рендеринга.

...