對於性能來講,不少狀況都是用空間換時間。
而後在儘可能減小空間的佔用,在二者之間作抉擇。html
這是一個地球人都知道的手段。那爲何要合併圖集?也只是將給初級開發者聽聽而已。
來一個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文件)。省了不少網絡連接的過程。可是要注意圖集的大小和體積,過大的圖集也會形成不良影響。性能
首先咱們要看看文件讀寫的步驟:優化
整體來看,合併圖集的好處真是太多了,沒有理由不用啊!
歡迎掃碼關注公衆號《微笑遊戲》,瀏覽更多內容。
this
本文由博客羣發一文多發等運營工具平臺 OpenWrite 發佈3d