我正在优化着色器代码以渲染大三角形条带。有人建议我应该尽可能为我的顶点属性使用低精度数据类型,所以我开始尝试。我将一些组件从高电平减少到低电平,但没有获得任何严重的性能改进。因此,我使用 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);
Run Code Online (Sandbox Code Playgroud)
rangehigh/rangemedium/rangelow 都具有相同的值以及 precisionhigh、 precisionmedium 和 precisionlow。
这是否意味着使用mediump或lowp代替highp根本不会更快?
问候
是的,在您的特定设备上,无论您指定 lowp、mediump 还是 highp,都将使用相同的精度。因此,在顶点着色器上切换到较低精度不会有任何好处。
老实说,顶点着色器性能很少是图形密集型应用程序中的性能瓶颈。通常是填充率(即简化像素着色器并减少过度绘制)或 CPU API 开销(着眼于减少绘制调用)。有时可能是顶点提交(在适当的情况下,使用 VBO、索引绘制调用并减小所提交顶点的大小/改进对齐方式)。
在优化之前尝试确定瓶颈是什么很重要,否则你可能会认为很多努力都是徒劳的。
归档时间: |
|
查看次数: |
2749 次 |
最近记录: |