对于性能来说,很多情况都是用空间换时间。
然后在尽量减少空间的占用,在两者之间做抉择。
这是一个地球人都知道的手段。那为什么要合并图集?也只是将给初级开发者听听而已。
来一个cocoscreator的链接:https://docs.cocos.com/creator/manual/zh/asset-workflow/atlas.html
this.gl.useProgram(this.program);
this.gl.bindTexture(gl.TEXTURE_2D, batchNode.getTexture().getTexture());
3.传递顶点数据
let n = indexList.length;
let indices = new Uint8Array(indexList);
//放入缓冲区
let buffer = this.buffer.initBuffers(vertices, ‘vertices‘);
let persize = vertices.BYTES_PER_ELEMENT;
// 设置数据 这里可以优化
let pointer = program.setPointer(‘a_Position‘, 3, gl.FLOAT, false, persize * count, 0);
let texPointer = program.setPointer(‘a_TexCoord‘, 2, gl.FLOAT, false, persize * count, persize * 3);
this.buffer.initBuffers(indices, ‘indices‘, this.gl.ELEMENT_ARRAY_BUFFER);
let u_Sampler = program.getUniformLocation(‘u_Sampler‘);
if (!u_Sampler) {
console.log(‘Failed to get the storage location of u_Sampler‘);
return false;
}
gl.uniform1i(u_Sampler, 0);
//调用一次drawcall加一
gl.drawElements(gl.TRIANGLES, n, gl.UNSIGNED_BYTE, 0);
在着色器程序不变的情况下,如果我们很多sprite 使用的都是一张纹理上的碎图,只是纹理坐标不同,那我们就可以在第3步传递数据的时候做文章,其他几步就可以不动,然后让绘制一次完成。相反的,如果有两个sprite使用了不同的纹理,那么就需要绑定两次纹理。这些步骤就需要再执行一次。drawcall也就变成了2。
显然合并图集已经影响了帧率和drawcall。
这个是显而易见的,十张图请求十次,合成图集就请求两次(因为多出一个plist文件)。省了很多网络链接的过程。但是要注意图集的大小和体积,过大的图集也会造成不良影响。
首先我们要看看文件读写的步骤:
总体来看,合并图集的好处真是太多了,没有理由不用啊!
欢迎扫码关注公众号《微笑游戏》,浏览更多内容。
本文由博客群发一文多发等运营工具平台 OpenWrite 发布
原文:https://www.cnblogs.com/cgw0827/p/13052379.html