最适合他们的做法是什么?有性能差异吗?
答案 0 :(得分:2)
对他们来说最好的做法是什么?
在大多数情况下,这些仅在移动设备上起作用。规范说,实现总是可以使用更高的精度,因此在桌面上,顶点着色器和片段着色器都始终以highp运行。 (我知道没有台式机GPU并非如此)
摘自spec第4.5.2节
4.5.2精确资格赛
...
精度限定符声明基础实现必须使用的最小范围和精度 在存储这些变量时。实现可能会使用比所要求的更大的范围和精度,但是 不少。
对于手机和平板电脑,则有几个答案。没有最好的。由你决定
使用最低的精度,仍然可以完成所需的工作。
使用highp并忽略性能问题和无法正常使用的旧手机
使用mediump并忽略错误(请参见下文)
检查用户的设备是否支持highp,如果不使用功能较少的其他着色器。
WebGL默认将顶点着色器使用highp,而片段着色器没有默认值,您必须指定一个。此外,片段着色器中的highp是一项可选功能,某些移动GPU不支持它。我不知道2019年的百分比是多少。AFAIK在2019年出货的大多数手机甚至所有手机都支持高电平,但是较旧的手机(2011、2012、2013)不支持。]
根据规格:
顶点语言要求使用
lowp
,mediump
和highp
进行编译和链接,而不会出现错误。 片段语言要求使用lowp
和mediump
进行编译,而不会出错。 支持highp
是可选的。
通常需要高处的地方的例子。 Phong阴影点灯通常需要高压。因此,例如,您可能在不支持highp的系统上仅使用定向灯,或者在移动设备上仅使用定向灯以提高性能。
性能上有区别吗?
是的,但是正如上面所说,实现可以自由使用更高的精度。因此,如果您在台式机GPU上使用mediump,您将看不到任何性能差异,因为它实际上始终在使用highp。在移动设备上,至少在2019年,您将看到性能差异。您还可能会看到着色器真正需要的地方。
这里是设置为使用mediump的phong着色器。在台式机上,由于mediump实际上很高,因此可以工作
在移动设备上,其中的mediap实际上是mediap会损坏
大多数2D游戏都是一个例子,至少在片段着色器中,可以使用mediump。