使用相同shader的2张图,是否可以动态合图

如题,因为如果一次性加载100张微信头像,然后每个头像都用shader裁成圆形。用shader的初衷是因为mask会增加dc,所以使用shader将图片裁成圆形。但是如果动态合图无法发挥作用,那dc还是降不下来。于是,死循环啦,费解呀费解

没有办法吧 如果是本地资源才有办法的。

如果有办法 100个微信头像整合到一个图里面就有办法的

这个让我很费解

动态合图可以作用
但是drawcall降不下来

动态合图一般是有用的,但是如此shader就无法准确的裁掉图片,因为uv已经改变了

能讲讲如何动态合图吗?

spriteFrame对象,可以获取到图片在合图下的uv,以及旋转状态
传入到shader内就能处理了

H5可以试试头像用canvas画到一张图上

能具体讲讲吗

可以看下动态图集的源码,多张图画到一张大图上,同时spriteFrame的uv会变化,shader中传入这张大图

你可以看一下文档里面的”动态合图“,H5下面是默认开启的

但是网络图片加载,貌似不行

网络加载图片应该可以 但是我不知道会不会跟自动合图一样被压缩导致 shader无法使用

没问题的




看看是不是能解决你的问题

你这样弄 是没有合批的吧

drawcall还是合图?
合图是开了的,
只是能保证用合图的纹理依然能够展示正确的shader效果

但是drawcall合不了

如果 合图没有问题的 drawcall 我可以解决的

你用uniform增加了一个uvoffset,这样是无法合批的。

1需要使用相同纹理也就是将所有头像合成一个图集,或者multitexture技术。不过multitexture对于这种头像量大的不太合适。还是建议合成一个图集,可以通过ccc自己的动态合图来解决。
2合成图集后,uv数据发生改变,裁切圆形时不能直接用0.5作为圆心了。不同的图的圆心数据不同。这个数据必须通过顶点数据传给gpu。可以看一看论坛上自定义顶点数据格式的文章,不过这个比较麻烦,还有一个简单的做法,就是通过颜色数据来传你的uvoffset。