大佬牛逼,就出方案了
大佬牛批,mark一波
取决于shader
图片大小有限制吗,就是2048X2048X8里面可以合成一个dc?
是的。。。
个人建议不要滥用这个技术,同时active的texture越多占用的显存带宽是很恐怖的,特别是在手机上,搞得好还好,搞不好你一个drawcall都能卡出翔。。。
我理解不管是否使用MultiTexture shader,纹理数量是一样的,所以显存占用没有变化。
带宽占用和纹理采样次数相关,和active的纹理数量无关。
不过对于这种实现我也有点疑问,虽然在运行效率上DC降了,但是shader的写法是用8个if挨个判断,shader编译后会有两种结果:
一种是编译器优化去掉了分支,即实际上所有分支都走一遍最后合并,相当于一次片元着色器采样8次,而且是采样不同纹理,cache miss问题也会加重,这种是很消耗带宽的。
另一种是产生branching,众所周知shader里产生branching会慢。
是的,对于gl1除了if else应该没有什么办法,必定最高8倍带宽了。gl2应该可以texIds[uniform],不太确定没有试过。
(补充,对于gl1编译的结果我也不太清楚,if else也有可能是branching)
双刃剑,靠自己把握了。
编译结果取决于硬件
是的,需要自己根据项目权衡
实测是能把多纹理合并一个纹理,但是在实际用的时候比如A纹理里之前参与过合图,在正常使用该贴图里的某张精灵帧,发现并不能正常获取该精灵帧,已经乱了,是不是修改了uv坐标导致异常?希望能指教一下
乱了那肯定是没有去正确的合图里面取到内容了。
我的意思是比如我用了您的方法去拿A纹理里面的a精灵帧与B纹理里面的b精灵帧使用了您的方法实现MultiTexture,是显示没问题,正常的,但是会有个问题就是A纹理与B纹理没办法在其他地方正常使用了,比如我们某个功能要用到A纹理里的b精灵帧,就会发现取不到了,取到的位置会显示错误,不知道您这边有解决方案吗
你是不是在编辑器里面看是错乱的。如果你的textureIdx选对了,在浏览器里面看应该就是正常的。
可以加个联系方式吗,可能我表达的有问题
我id就是我wx