iPhone金属在纵向和横向模式之间的奇异之处

时间:2018-12-30 00:16:47

标签: ios swift metal landscape-portrait

我正在为iPhone编写一个Metal应用程序。我有大量的OpenGL经验,所以应该不难,对吧?

错误。

我正在渲染不带长宽比校正的矩形的2d场景-顶点位于[-1,1] x [-1,1]坐标中,因此这应填满整个屏幕并使场景变形以适合屏幕。

顺便说一句,它正在相对较新的iPhone(版本12.1.2(16C101))上运行。

在横向模式(宽度>高度)下,这就是我得到的(屏幕快照):https://imgur.com/r7gJXct。屏幕的一半是空白。

在纵向模式下(高度>宽度),我得到的正是我所期望的(扭曲的正方形):https://imgur.com/ZoPoHhR

我认为正在发生的事情是,Metal只是渲染了肖像模式,并且剪辑掉了屏幕上的所有内容,而没有将其“挤压”到屏幕视口中。

该代码只是基本的金属代码,没有配置。我接受了默认的Metal iOS项目,删除了Renderer中的代码,然后按照Hello Hello Triangle教程将制服发送到了着色器并使用了不同的顶点数据。

我应该如何解决此“错误”? 甚至是错误吗?

1 个答案:

答案 0 :(得分:0)

想通了!

我猜在func mtkView(_ view: MTKView, drawableSizeWillChange size: CGSize)中,我必须添加行metalLayer.frame = view.layer.frame,它才有效。