在优化WebGL2渲染引擎时,我尝试将着色器接口(片段着色器和顶点着色器之间)中的某些变量指定为“ flat”。这些变量确实可以视为平坦的,并且对于整个渲染的几何图形基本上是统一的。 (但它们已加载到顶点着色器中。)
之前:
in vec4 v_metadata;
in vec4 v_lightmapPatchCoords;
in vec4 v_matValue0;
in vec4 v_matValue1;
in vec3 v_viewPos;
in vec3 v_worldPos;
in vec3 v_viewNormal;
in vec2 v_textureCoord;
in vec2 v_vertexCoords;
in vec2 v_trimPatchCoords;
之后:
flat in vec4 v_metadata;
flat in vec4 v_lightmapPatchCoords;
flat in vec4 v_matValue0;
flat in vec4 v_matValue1;
in vec3 v_viewPos;
in vec3 v_worldPos;
in vec3 v_viewNormal;
in vec2 v_textureCoord;
in vec2 v_vertexCoords;
in vec2 v_trimPatchCoords;
但是,此简单更改会导致性能大幅下降。在相同的数据上,我的渲染器从50fps下降到〜20fps。 很难找到有关着色器接口的信息以及它们如何影响性能。我希望“扁平”变量比平滑变量更有效率。
我知道我正在顶点着色器和片段着色器之间传递大量数据,并认为这可能是渲染的瓶颈,但是很难确认。
我想知道是否由于ANGLE界面层而导致生成的HLSL生成不佳,从而导致效率差异很大。