近期记录
刚开始没有看quick的时候按照http://www.cocoachina.com/bbs/read.php?tid-302467.html的方式扩展了一下sprite使其拥有hue的功能。
但是,通过反复大量创建发现,GLProgramState在sprite析构后并没有在短时间内被清理,具体原因未知~可能是autorelease慢也可能是直接内存泄露了~
对了我使用的是cocos3.3版本。
然后发现quick中的filter本身就有hue的shader方法,于是乎寄希望于quick能处理好内存这一块,但是除了发现内存还是一样有问题以外,
似乎所有的sprite的hue都会变成最后设置的那一次。看了下filter类,发现在initProgram中设置_pProgramState使用的是
GLProgramState::getOrCreateWithGLProgram。这个方法就会让使用同一个shader的的sprite调用的同一个filter。
针对以上问题,改成GLProgramState::create即可让每一个sprite拥有独立的GLProgramState,实际测试发现大量sprite设置hue的时候会
稍微卡顿一下,内存稍微高一点,但是影响也不大。所以很疑惑quick为什么要使用getOrCreateWithGLProgram这个方法或者说
没有支持传参来选择构造的方法,难道是因为GLProgramState真的会导致内存泄露?