首页 > Unity3D频道 > 【Unity杂文】 > URP在小米10安卓12系统闪退
2022
03-11

URP在小米10安卓12系统闪退

在小米10安卓12系统上闪退,同样的手机在安卓11系统和安卓12.5系统上就不闪退,原因是自己拓展的效果在CBuffer里没有字节对齐。

闪退错误 :ApiGLES::ClearBufferSubData(unsigned int, gl::BufferTarget, long, long)+168)

如下图所示,必须要按half4 half2 half 从上到下的顺序写,顺序不能乱不能穿插的写,不然就会闪退,还有不能写half3,要用half4代替half3,不然在某些机器上会显示错误。

URP在小米10安卓12系统闪退 - 雨松MOMO程序研究院 - 1

Shader Graph也同时存在同样问题引起闪退,如下图所示,它是按照属性定义的顺序排列,并不会字节对齐。

URP在小米10安卓12系统闪退 - 雨松MOMO程序研究院 - 2

找到Shader Graph的代码PropertyCollector.cs

public void GetPropertiesDeclaration(ShaderStringBuilder builder, GenerationMode mode, ConcretePrecision inheritedPrecision)

在最上面进行排序。

改完后终于字节对齐了。小米12安卓10系统不再闪退

URP在小米10安卓12系统闪退 - 雨松MOMO程序研究院 - 3

在检查一下CBUFFER_START里包的属性没有在Properties中声明,如果没有声明也会闪退。

在检查一下采样器是否超过16个,SAMPLER(sampler_XXX)这里只是采样器的声明,只有调用SAMPLE_TEXTURE2D才会真的采样。如果Texture本身就是空,这里还是会占采样器的数量。

如果明确贴图没有使用,最好包一层宏,这样可以减少采样寄存器。

最后在检查一下CBUFFER_START里属性的数量,尽可能的减少数量,太多了也会在小米10上闪退。

 

最后编辑:
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
捐 赠写博客不易,如果您想请我喝一杯星巴克的话?就进来看吧!

URP在小米10安卓12系统闪退》有 10 条评论

  1. rheros 说:

    涨知识了

  2. Kaven 说:

    DrawBuffersBatchMode 和 WriteLineVertex 这两个闪退 大佬知道什么原因么

  3. jeffxby 说:

    vulkan 会有这样的情况吗? 小米10 应该是可以用vulkan的把?

  4. Level 说:

    对齐的时候float4和half4这样的都算一种吗?还是float类型的先排完然后到half类型呢?

  5. Rapper 说:

    这种问题更好奇是如何定位的,一句字节对齐,这里面不知道要多少汗水

  6. Reguluz 说:

    啊?这玩意儿官方没有任何说明吗
    我记得官方声明中只说了要拼成4的倍数?这么离谱吗

留下一个回复

你的email不会被公开。