我有一个OS X Metal应用程序,我希望以非原生分辨率全屏运行,例如我的原始分辨率是1920x1080,我想以1024x768全屏显示应用程序。 (除非我无法使用特定于OpenGL的NSView
函数,否则我不相信使用Metal绘制事物会影响这个问题。)
我的渲染器使用硬编码大小为1024x768的后缓冲区。
当我使用bounds = 1024x768
创建窗口时,我会看到一个全屏窗口,但我的内容被绘制为居中并且不会拉伸以填满整个屏幕。
当我使用bounds = 1920x1080
创建窗口时,我会看到一个全屏窗口,但我的内容会在左上角绘制并且缩放不正确(因为两个分辨率之间的比率不匹配)。
使用[NSView - enterFullScreenMode:withOptions:]
产生了相同的结果。设置[NSView autoresizingMask]
也没有改变任何内容。
理想情况下,我希望窗口的大小与屏幕一样,并且可以拉伸低分辨率后台缓冲区以填充整个窗口。我错过了什么才能让我这样做?
我NSResponder <NSApplicationDelegate>
的相关应用初始化:
// Create the window
self.Window = [NSWindow alloc];
[self.Window initWithContentRect:bounds
styleMask:NSBorderlessWindowMask
backing:NSBackingStoreBuffered
defer:YES];
// Create the view
self.View = [NSView alloc];
[self.View initWithFrame:bounds];
[self.View setWantsLayer:YES]; // The generated layer is CAMetalLayer
// Associate the view with the window
[self.Window setContentView:self.View];
// Misc
[self.Window makeKeyAndOrderFront:self.Window];
[self.Window setAcceptsMouseMovedEvents:YES];
[self.Window setHidesOnDeactivate:YES];
// Fullscreen
[self.Window setCollectionBehavior:NSWindowCollectionBehaviorFullScreenPrimary];
[self.Window toggleFullScreen:nil];
[self.Window makeFirstResponder:self.View];
感谢。
答案 0 :(得分:2)
支持视图的图层被约束为使其框架等于该视图的边界。默认情况下,drawableSize
的{{1}}等于其内容比例的界限。但是,您可以通过明确设置图层的CAMetalLayer
。