从MaterialManager.GetMaterial取到的NMaterial如果old pma=false and new blend mode pma=true会出现渲染异常
报BUG版本:5.1.0
抱歉目前暂时没有制作最小化的demo,问题复现概率也比较低,最终是通过阅读代码分析发现的。
重现步骤:
1. NGraphics 没有开启 ColorFilter(MaterialManager是用共享的而不是独立的)
2.之前帧曾经出现过多种BlendMode pma为 false的对象(所以在MaterialManager对应的_materials那个List中会出现超过1个的材质缓存)
3.在某一帧出现了一个BlendMode.Screen(或其他pma=true)的渲染对象
4.该渲染对象的材质从 GetMaterial 中会获取一个缓存的材质,由于之前的Material在创建的时候并没有增加"COLOR_FILTER"关键词(因为BlendMode为Add或任意其他pma=false的类型),所以会导致渲染出现的结果出错。
下面我截图部分代码和注释作为佐证:
PS:目前修复的方式比较挫,在BlendModeUtils.Apply中调用EnableKeyword("COLOR_FILTER");,希望能讨论下后续应该如何处理
抱歉目前暂时没有制作最小化的demo,问题复现概率也比较低,最终是通过阅读代码分析发现的。
重现步骤:
1. NGraphics 没有开启 ColorFilter(MaterialManager是用共享的而不是独立的)
2.之前帧曾经出现过多种BlendMode pma为 false的对象(所以在MaterialManager对应的_materials那个List中会出现超过1个的材质缓存)
3.在某一帧出现了一个BlendMode.Screen(或其他pma=true)的渲染对象
4.该渲染对象的材质从 GetMaterial 中会获取一个缓存的材质,由于之前的Material在创建的时候并没有增加"COLOR_FILTER"关键词(因为BlendMode为Add或任意其他pma=false的类型),所以会导致渲染出现的结果出错。
下面我截图部分代码和注释作为佐证:
PS:目前修复的方式比较挫,在BlendModeUtils.Apply中调用EnableKeyword("COLOR_FILTER");,希望能讨论下后续应该如何处理
没有找到相关结果
已邀请:
5 个回复
谷主
赞同来自: ethanchan
ethanchan
赞同来自:
继续浏览了一下,这里应该是没有问题的。。。那真找不到原因,继续跟进。。。
谷主
赞同来自:
ethanchan
赞同来自:
不过今天做了个简单尝试让我有点震惊,我将 _ColorOption 的定义从 COLOR_FILTER的宏里面移到外面去,就再也无法重现该问题。
谷主
赞同来自: