Opengl es highp、mediump和lowp之间的性能差异

Opengl es highp、mediump和lowp之间的性能差异,opengl-es,glsl,Opengl Es,Glsl,我正在优化渲染大三角形条带的着色器代码。有人向我建议,如果可能的话,我应该尝试对顶点属性使用低精度的数据类型,所以我开始尝试。我将一些组件从highp减少到lowp,但没有得到任何严重的性能改进。因此,我使用glGetShaderPrecisionFormat来获得格式的范围和精度,但是我收到了相同的highp、mediump和lowp值,这意味着例如 int rangehigh[2], precisionhigh; glGetShaderPrecisionFormat(GL_VERTEX_SH

我正在优化渲染大三角形条带的着色器代码。有人向我建议,如果可能的话,我应该尝试对顶点属性使用低精度的数据类型,所以我开始尝试。我将一些组件从highp减少到lowp,但没有得到任何严重的性能改进。因此,我使用glGetShaderPrecisionFormat来获得格式的范围和精度,但是我收到了相同的highp、mediump和lowp值,这意味着例如

int rangehigh[2], precisionhigh;
glGetShaderPrecisionFormat(GL_VERTEX_SHADER, GL_HIGH_FLOAT, rangehigh, &precisionhigh);

int rangemedium[2], precisionmedium;
glGetShaderPrecisionFormat(GL_VERTEX_SHADER, GL_MEDIUM_FLOAT, rangemedium, &precisionmedium);

int rangelow[2], precisionlow;
glGetShaderPrecisionFormat(GL_VERTEX_SHADER, GL_LOW_FLOAT, rangelow, &precisionlow);
rangehigh/RangeMiddle/rangelow以及precisionhigh、PrecisionMiddle和precisionlow都具有相同的值

这是否意味着用中泵或低泵代替高泵不会更快


关于

是的,在您的特定设备上,无论您指定的是lowp、mediump还是highp,都将使用相同的精度。因此,在顶点着色器上切换到较低精度不会带来任何好处

老实说,顶点着色器性能很少是图形密集型应用程序的性能瓶颈。它通常是填充率(即简化像素着色器并减少透支)或CPU API开销(看看减少绘制调用)。偶尔也可以是顶点提交(在适当的情况下,使用VBO、索引绘制调用并减小提交顶点的大小/改进其对齐方式)


在优化之前,尝试确定瓶颈是什么很重要,否则您可能会期待大量的努力付诸东流。

更改着色器中的精度在内存中仍然存储为32位浮点时没有多大作用。