当我在高分辨率显示器上运行LayerBackedOpenGLView示例时,OpenGL上下文不会以高分辨率呈现(图层的contentScale为1.0)。
我已按照Apple documentation中的步骤操作,但contentScale仍为1.0。
具体来说,我原本以为在MyOpenGLView的init方法中添加以下内容会给我一个高分辨率的层:
[self setWantsBestResolutionOpenGLSurface:YES];
但是contentScale仍然是1.0。
更新示例以高分辨率渲染OpenGL所需的步骤是什么?
答案 0 :(得分:1)
我能够获得适当的内容比例。
我在self.wantsLayer = YES
中添加了-[MyOpenGLView init]
。虽然这是在-[MainController awakeFromNib]
中设置的,但它似乎还不够早。
我还将以下方法添加到MyOpenGLView
- (void)viewDidChangeBackingProperties
{
[super viewDidChangeBackingProperties];
self.layer.contentsScale = self.window.backingScaleFactor;
}
尽管documentation中有以下声明:
,但这仍然是必要的在高分辨率方面,系统会自动调整图层支持的视图。您无需做任何工作即可获得在高分辨率显示器上看起来很棒的内容。
<强>更新强>
根据Apple开发人员的说法,这是OS X 10.10中的一个已知错误。
您好。这是10.10.0中的已知错误。目前,您可以通过将其添加到NSOpenGLView子类来解决此问题(请注意,此代码在旧版Mac OS X上将无害。)很抱歉给您带来不便!
static CGFloat scaleFactorForOpenGLView(NSView *view) {
if ([view wantsBestResolutionOpenGLSurface]) {
NSWindow *window = [view window];
if (window) {
return [window backingScaleFactor];
}
}
return 1;
}
- (void)viewDidChangeBackingProperties {
[super viewDidChangeBackingProperties];
[[self layer] setContentsScale:scaleFactorForOpenGLView(self)];
}
- (CALayer *)makeBackingLayer {
CALayer *layer = [super makeBackingLayer];
[layer setContentsScale:scaleFactorForOpenGLView(self)];
return layer;
}