如何以及何时在“顶点和片段”着色器中选择highp,lowp和mediump?

时间:2019-11-29 07:35:47

标签: webgl

最适合他们的做法是什么?有性能差异吗?

1 个答案:

答案 0 :(得分:2)

  

对他们来说最好的做法是什么?

在大多数情况下,这些仅在移动设备上起作用。规范说,实现总是可以使用更高的精度,因此在桌面上,顶点着色器和片段着色器都始终以highp运行。 (我知道没有台式机GPU并非如此)

摘自spec第4.5.2节

  

4.5.2精确资格赛

     

...

     

精度限定符声明基础实现必须使用的最小范围和精度   在存储这些变量时。实现可能会使用比所要求的更大的范围和精度,但是   不少。

对于手机和平板电脑,则有几个答案。没有最好的。由你决定

  1. 使用最低的精度,仍然可以完成所需的工作。

  2. 使用highp并忽略性能问题和无法正常使用的旧手机

  3. 使用mediump并忽略错误(请参见下文)

  4. 检查用户的设备是否支持highp,如果不使用功能较少的其他着色器。

WebGL默认将顶点着色器使用highp,而片段着色器没有默认值,您必须指定一个。此外,片段着色器中的highp是一项可选功能,某些移动GPU不支持它。我不知道2019年的百分比是多少。AFAIK在2019年出货的大多数手机甚至所有手机都支持高电平,但是较旧的手机(2011、2012、2013)不支持。]

根据规格:

  

顶点语言要求使用lowpmediumphighp进行编译和链接,而不会出现错误。   片段语言要求使用lowpmediump进行编译,而不会出错。 支持   highp是可选的

通常需要高处的地方的例子。 Phong阴影点灯通常需要高压。因此,例如,您可能在不支持highp的系统上仅使用定向灯,或者在移动设备上仅使用定向灯以提高性能。

  

性能上有区别吗?

是的,但是正如上面所说,实现可以自由使用更高的精度。因此,如果您在台式机GPU上使用mediump,您将看不到任何性能差异,因为它实际上始终在使用highp。在移动设备上,至少在2019年,您将看到性能差异。您还可能会看到着色器真正需要的地方。

这里是设置为使用mediump的phong着色器。在台式机上,由于mediump实际上很高,因此可以工作

在移动设备上,其中的mediap实际上是mediap会损坏

大多数2D游戏都是一个例子,至少在片段着色器中,可以使用mediump。

相关问题