Tom*_*idd 6 opengl-es ios metal tvos
所以我有一个奇怪的问题。我正在将旧游戏引擎的现代源端口移植到iOS和tvOS。它是使用OpenGL编写的,我发现其中的一个分支使用了OpenGL ES,并且我已经能够让Frankenstein将两者结合到现在可以在iOS和tvOS设备上成功运行的位置。
这是很奇怪的部分-游戏的某些部分无法在我的iPhone X上正确渲染,但它们确实在我的iPad Air 2和Apple TV(第四代)上正确渲染。
我在输出窗口中的一连串消息中注意到,引擎在iPhone X上输出渲染器信息的位置显示
OpenGL version: OpenGL ES 2.0 Metal 58.4
而在iPad Air 2上
OpenGL version: OpenGL ES 2.0 A8X GPU - 130.1
在我看来,“ OpenGL ES Metal”听起来像是“大虾”,因为它们显然不是一回事。如果我猜到了,我想说的是,在iPhone X上,OpenGL ES驱动程序运行在某种Metal转换层之上,这可能是Apple制定的长期计划,以期在将来OpenGL ES弃用。
但是无论出于什么原因,它都在破坏我的游戏引擎,尽管我很擅长使代码协同工作,但是我对图形编码的了解还不够,甚至都不知道在哪里可以改变工作方式。
显然,正确的答案是修复导致问题的原因,但作为短期修复,我很好奇是否有办法让iOS上的游戏在Metal之上不使用OpenGL ES?(如果确实是这种情况)
因此,就像布拉德·拉尔森(Brad Larson)在下面说的那样,答案是:是的,OpenGL ES在Metal上运行,不,这是不可避免的。但是,如果将来有其他人遇到此问题,我会在另一个SO答案的帮助下解决真正的潜在问题,以供将来参考:
基本上,着色器的浮点精度需要从lowp和升级mediump到highp
是的,OpenGL ES实际上是最新iOS版本上的Metal的接口(因为我相信没有错,所以我相信是10)。
值得注意的是,显然,最新的iPhone在iOS 10上没有GL驱动程序。GL是在Metal之上实现的,这意味着使用OpenGL只会真正节省您一点开发工作–考虑到OpenGL在移动设备上无法真正实现“一次编写,随处运行”的承诺,并不能节省多少。
您可以通过在现代iOS版本上分析OpenGL ES代码来自己验证这一点:
除上述内容外,您还将看到特定-[MTLIOAccelCommandQueue submitCommandBuffers:count:]于Metal的操作,例如出现在OpenGL ES应用程序性能分析中。
据我所知,这是无法绕开的方法,这是在现代iOS版本上构建渲染的方式。就是说,我还没有看到这会改变我的OpenGL ES代码的行为。我已经看到不同的iOS GPU由于其硬件而产生的渲染行为略有不同,因此您可能会遇到特定于设备的事物。
检查涉及精度限定符,Z轴打折,着色器中的零除等的常见可疑对象,看看其中是否有一个使您的渲染混乱。在这些地方,我已经看到新一代的设备干扰了我的渲染。
| 归档时间: |
|
| 查看次数: |
813 次 |
| 最近记录: |