在Cococs2d中同时顺序绘制N个材质ID/纹理ID相同的可绘制对象时(同一绘制帧内),可以节省大量DrawCall(同一渲染层级)
function testButtonOpt:runTest1()
--在同一帧内 在同一绘制顺序下 绘制材质ID/TextureID 可节省大量DrawCall 即使可绘制对象的材质纹理发生变化,但是只要是同一材质 都可以节省
--这个情况下 默认绘制顺序为
-- ZOrder 0:
-- InsertSprite->InsertSprite->InsertSprite ...
-- ZOrder 1:
-- bing->bing->bing ...
--绘制顺序未被打乱
display.addSpriteFrames("map_res/demon_siege_march.plist")
display.addSpriteFrames("map_res/dress_1_battle_line.plist")
for i=1,100 do
display.newSprite("map_res/map_foot_print.png"):addTo(self, 0):pos(display.cx, display.cy)
local pFrames = display.newFrames(string.format("walker_ds_d%s_%%.5d.png", 6 ),0,6)
local pAnimation = display.newAnimation(pFrames, 0.125)
local bing = cc.Sprite:createWithSpriteFrame(pFrames[1]):addTo(self, 1):pos(display.cx, display.cy + 100)
bing:playAnimationForever(pAnimation)
end
end
function testButtonOpt:runTest2()
--这个情况下 默认绘制顺序为
-- InsertSprite->bing->InsertSprite->bing
-- 打乱了绘制顺序
display.addSpriteFrames("map_res/demon_siege_march.plist")
display.addSpriteFrames("map_res/dress_1_battle_line.plist")
for i=1,100 do
local InsertSprite = display.newSprite("map_res/map_foot_print.png"):addTo(self, 1):pos(display.cx, display.cy)
local pFrames = display.newFrames(string.format("walker_ds_d%s_%%.5d.png", 6 ),0,6)
local pAnimation = display.newAnimation(pFrames, 0.125)
local bing = cc.Sprite:createWithSpriteFrame(pFrames[1]):addTo(self, 1):pos(display.cx, display.cy + 100)
bing:playAnimationForever(pAnimation)
end
end
function testButtonOpt:runTest3()
--这个情况下 因为所有绘制对象都是InsertSprite所使用的TextureID 所以顺序不会被打乱, 但是在实际情况下 很难做到不被打乱(因为不会一次性渲染这么多 基本都是随需求添加 所以没办法保证绘制顺序)
display.addSpriteFrames("map_res/demon_siege_march.plist")
display.addSpriteFrames("map_res/dress_1_battle_line.plist")
for i=1,100 do
local InsertSprite = display.newSprite("map_res/map_foot_print.png"):addTo(self, i):pos(display.cx, display.cy)
end
end
Cocos2d 通过QuadCommand在同一渲染层级下进行GL Call 优化
猜你喜欢
转载自blog.csdn.net/qq_29094161/article/details/85231266
今日推荐
周排行