Webgl 如何以及何时在“顶点和片段”着色器中选择“高”、“低”和“中”?

Webgl 如何以及何时在“顶点和片段”着色器中选择“高”、“低”和“中”?,webgl,Webgl,他们的最佳实践是什么?性能有什么不同吗 他们的最佳实践是什么 在大多数情况下,这些只在手机上起作用。该规范称,一个实现可以始终使用更高的精度,因此在桌面上,顶点着色器和片段着色器始终以highp运行。(据我所知,没有任何桌面GPU不是这样的) 从第4.5.2节 4.5.2精度限定符 精度限定符声明基础实现必须使用的最小范围和精度 当存储这些变量时。实现可能使用比要求更大的范围和精度,但是 不少 对于手机和平板电脑,有几个答案。没有最好的。由你决定 使用尽可能低的精度,它仍能满足您的需要 使用h

他们的最佳实践是什么?性能有什么不同吗

他们的最佳实践是什么

在大多数情况下,这些只在手机上起作用。该规范称,一个实现可以始终使用更高的精度,因此在桌面上,顶点着色器和片段着色器始终以highp运行。(据我所知,没有任何桌面GPU不是这样的)

从第4.5.2节

4.5.2精度限定符

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

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

  • 使用尽可能低的精度,它仍能满足您的需要

  • 使用highp,忽略性能问题和无法使用的旧手机

  • 使用mediump并忽略错误(见下文)

  • 检查用户的设备是否支持highp,如果不支持,请使用具有较少功能的不同着色器

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

    根据规范:

    vertex语言需要使用任何
    lowp
    mediump
    highp
    来编译和链接而不会出错。 片段语言需要使用
    lowp
    mediump
    来编译而不会出错支持
    highp
    是可选的

    你通常需要高压力的地方的例子。Phong阴影点光源通常需要高亮度。例如,在不支持highp的系统上,您可能只使用平行光,或者在移动设备上,您可能只使用平行光来提高性能

    性能有什么不同吗

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

    这里是一个phong着色器集,用于使用mediump。在桌面上,因为mediump实际上很高,所以它可以工作

    在移动设备上,mediump实际上是mediump,它会中断

    例如,大多数2D游戏都可以使用mediump,至少在片段着色器中是这样

    他们的最佳实践是什么

    在大多数情况下,这些只在手机上起作用。该规范称,一个实现可以始终使用更高的精度,因此在桌面上,顶点着色器和片段着色器始终以highp运行。(据我所知,没有任何桌面GPU不是这样的)

    从第4.5.2节

    4.5.2精度限定符

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

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

  • 使用尽可能低的精度,它仍能满足您的需要

  • 使用highp,忽略性能问题和无法使用的旧手机

  • 使用mediump并忽略错误(见下文)

  • 检查用户的设备是否支持highp,如果不支持,请使用具有较少功能的不同着色器

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

    根据规范:

    vertex语言需要使用任何
    lowp
    mediump
    highp
    来编译和链接而不会出错。 片段语言需要使用
    lowp
    mediump
    来编译而不会出错支持
    highp
    是可选的

    你通常需要高压力的地方的例子。Phong阴影点光源通常需要高亮度。例如,在不支持highp的系统上,您可能只使用平行光,或者在移动设备上,您可能只使用平行光来提高性能

    性能有什么不同吗

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

    这里是一个phong着色器集,用于使用mediump。在桌面上,因为mediump实际上很高,所以它可以工作

    在移动设备上,mediump实际上是mediump,它会中断


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

    iirc精度限定符被指定为对桌面平台没有影响,而不是专门在桌面上指定。他们只是被设定为能够更高。“精度限定符声明基础实现在存储这些变量时必须使用的最小范围和精度。实现可能使用比请求的范围和精度更大的范围和精度,但不能小于”iirc精度限定符被指定为对桌面平台没有影响,它们不是专门在桌面上指定的。它们只不过是些小玩意儿