![](/img/trans.png)
[英]SpriteKit shader crash iOS 9: SKDefaultShading, gl_FragCoord
[英]gl_FragCoord precision
我有这个片段着色器代码,它们在iOS模拟器(非视网膜)和iPad2(非视网膜)之间显示不同:
highp vec2 textCoord;
textCoord.x = gl_FragCoord.x / uViewPortWidth;
textCoord.y = gl_FragCoord.y / uViewPortHeight;
highp vec4 resultColor = texture2D(uTexture, textCoord);
gl_FragColor = resultColor;
在实际设备中,某种程度上,结果参差不齐。 但是在模拟器中,它像地狱一样流畅。
真实设备:
是否由于gl_FragCoord的精度问题? 奇怪它仅在模拟器上如何工作...
任何技巧如何处理gl_FragCoord? 谢谢!
gl_FragCoord
定义为mediump
。 因此,符合ES 2的实现可以提供少至10位的存储空间。 但是ES并没有设置上限,因此另一个同样兼容的实现可能会丢弃precision修饰符,并将所有内容都视为16位(或更大)类型。
它还规定:
用于内部评估操作的精度以及随后与任何所得中间值相关联的精度限定必须至少与该操作消耗的操作数的最高精度限定一样高。
所以精度用于执行计算将至少mediump
-或highp
如果这是如何uViewPortWidth/Height
的声明。
但是,究竟为您提供的精度仍然取决于实现。 有趣的是,模拟器通常使用更高的精度。
因此,作为第一次尝试,请确保以任何方式使鸿沟都highp
。 如果没有达到您想要的精度,那么GPU可能不会在单个单元中提供精度,因此您必须考虑更复杂的解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.