我试图用谷歌搜索并在两周内了解我的问题,但我被打败了,所以我正在寻求帮助。
主要问题是我的自定义未点亮片段着色器在具有 mali gpu 的设备上经过一定时间后开始下降 fps - 我通过 cpu 部分中的 fps 计数器看到它。我不知道为什么在那个部分而不是在渲染部分,但是没有这个 fps 计数器我仍然可以感觉到 fps 的下降。
所以在三星 S4、三星 sm-t 380、小米红米 Note 5、三星 Tab s2 上一切正常,只在三星 s6 上掉线——解决问题我只是通过 Screen.SetResolution 函数将分辨率降低了一半。
我在想,在如此高分辨率的设备上绘制全屏精灵才是重点。然后我可以在 samsung sm-t580 上测试应用程序 - 下降就在那里 - 这个设备的分辨率比 S6 低。
我认为 arm Mali gpu 中的问题 - 或者我确定在我手中。
因此,我再次使用具有 3 个纹理的 draw-mode = tile(countinuous) sprite 渲染全屏,只需在 vert func 中更改它们的 uvs 并在片段中应用。这会产生失真效果。着色器显示我有 10 个数学和 4 个纹理,是的 3 个纹理,但我正在进行 4 个采样。
纹理为 256x256,具有重复模式。我正在尝试不同的纹理压缩、dxt5、etc1-2、alpha8、R5 - 没有效果。
我试图将不同的精度减半并在着色器的不同部分浮动 - 没有效果。
我在考虑 alpha,所以我采用了没有 alpha 的纹理,而不是从 tex2D 获取它。即使纹理的大小是 64x64,也无关紧要。
ZTest、ZWrite、Blend、Queue RenderType 和其他参数的舞蹈 - 没有效果。
我的猜测是,也许在 mali uv 上:TEXCOORD0 必须只有 float2,而不是 float3 或 float4 - 没有效果。
我正在应用 _Time.y 并用脚本中的浮点数替换它 - 没有效果。
仅减少着色器中 tex2d 的数量 - 正在工作。为什么?
我做错了什么?