getShaderPrecisionFormat return 值
getShaderPrecisionFormat return values
我对 getShaderPrecisionFormat 方法、它的用途以及它告诉我的内容感到困惑,因为对我来说它总是 return所有参数的精度完全相同,唯一的区别在于 INT / FLOAT .
要明确:
调用 gl.FRAGMENT_SHADER 和 gl.VERTEX_SHADER 与 gl.LOW_FLOAT、gl.MEDIUM_FLOAT 和 gl.HIGH_FLOAT 组合总是 return
WebGLShaderPrecisionFormat { precision: 23, rangeMax: 127, rangeMin: 127 }
调用 gl.FRAGMENT_SHADER 和 gl.VERTEX_SHADER 与 gl.LOW_INT、gl.MEDIUM_INT 和 gl.HIGH_INT 组合总是 return
WebGLShaderPrecisionFormat { precision: 0, rangeMax: 24, rangeMin: 24 }
我也尝试提供两个额外的参数 "range" 和 "precision" 但无法得到任何不同的结果。我假设我犯了一个错误,但是从 docs 我无法自己弄清楚如何正确使用它。
看来您正确使用了这些调用。
如果您在 desktop/laptop 上 运行,结果并不奇怪。我希望 WebGL 在此类系统上的完整 OpenGL 实现之上分层。即使这些系统支持 ES 2.0,它主要与 WebGL 功能级别相匹配,这很可能只是一个减少的 API,最终使用与完整 OpenGL 实现相同的底层 driver/GPU 功能。
完整的 OpenGL 并不真正支持精度。它确实有 GLSL 中的关键字,但这只是为了与 OpenGL ES 的源代码兼容。用 GLSL 4.50 规范的话来说:
Precision qualifiers are added for code portability with OpenGL ES, not for functionality. They have the same syntax as in OpenGL ES, as described below, but they have no semantic meaning, which includes no effect on the precision used to store or operate on variables.
然后继续定义 IEEE 32 位浮点数的使用,它具有您从调用中看到的 23 位精度。
如果您在移动设备(例如 phone 或平板电脑)上尝试相同的操作,您很可能会得到不同的结果。许多移动 GPU 支持 16 位浮点数(又名 "half floats"),并利用它们。它们中的一些可以比在浮点数上更快地对半浮点数进行操作,并且即使操作本身并不更快,减少内存使用和带宽也是有益的。减少 memory/bandwidth 使用对于移动设备提高性能和电源效率至关重要。
我对 getShaderPrecisionFormat 方法、它的用途以及它告诉我的内容感到困惑,因为对我来说它总是 return所有参数的精度完全相同,唯一的区别在于 INT / FLOAT .
要明确:
调用 gl.FRAGMENT_SHADER 和 gl.VERTEX_SHADER 与 gl.LOW_FLOAT、gl.MEDIUM_FLOAT 和 gl.HIGH_FLOAT 组合总是 return
WebGLShaderPrecisionFormat { precision: 23, rangeMax: 127, rangeMin: 127 }
调用 gl.FRAGMENT_SHADER 和 gl.VERTEX_SHADER 与 gl.LOW_INT、gl.MEDIUM_INT 和 gl.HIGH_INT 组合总是 return
WebGLShaderPrecisionFormat { precision: 0, rangeMax: 24, rangeMin: 24 }
我也尝试提供两个额外的参数 "range" 和 "precision" 但无法得到任何不同的结果。我假设我犯了一个错误,但是从 docs 我无法自己弄清楚如何正确使用它。
看来您正确使用了这些调用。
如果您在 desktop/laptop 上 运行,结果并不奇怪。我希望 WebGL 在此类系统上的完整 OpenGL 实现之上分层。即使这些系统支持 ES 2.0,它主要与 WebGL 功能级别相匹配,这很可能只是一个减少的 API,最终使用与完整 OpenGL 实现相同的底层 driver/GPU 功能。
完整的 OpenGL 并不真正支持精度。它确实有 GLSL 中的关键字,但这只是为了与 OpenGL ES 的源代码兼容。用 GLSL 4.50 规范的话来说:
Precision qualifiers are added for code portability with OpenGL ES, not for functionality. They have the same syntax as in OpenGL ES, as described below, but they have no semantic meaning, which includes no effect on the precision used to store or operate on variables.
然后继续定义 IEEE 32 位浮点数的使用,它具有您从调用中看到的 23 位精度。
如果您在移动设备(例如 phone 或平板电脑)上尝试相同的操作,您很可能会得到不同的结果。许多移动 GPU 支持 16 位浮点数(又名 "half floats"),并利用它们。它们中的一些可以比在浮点数上更快地对半浮点数进行操作,并且即使操作本身并不更快,减少内存使用和带宽也是有益的。减少 memory/bandwidth 使用对于移动设备提高性能和电源效率至关重要。