cocos2dx自动批绘制的条件

为什么必须要相同纹理、相同混合函数、相同shader?

要满足Auto-batching,就必须有这三个条件,这是为什么呢?

我们回到之前的代码,在调用节点的draw函数时,调用了QuadCommand的init函数:

 void Sprite::draw(Renderer *renderer, const Mat4 &transform, uint32_t flags)
 {
 ​    // Don't do calculate the culling if the transform was not updated
 ​    _insideBounds = (flags & FLAGS_TRANSFORM_DIRTY) ? renderer->checkVisibility(transform, _contentSize) : _insideBounds;
 
 ​    if(_insideBounds)
 ​    {
 ​        _quadCommand.init(_globalZOrder, _texture->getName(), getGLProgramState(), _blendFunc, &_quad, 1, transform);
 ​        renderer->addCommand(&_quadCommand);
 ​    }
 }

在init中调用了 生成材料id的方法:

void QuadCommand::generateMaterialID()
{
    if(_glProgramState->getUniformCount() > 0)
    {
        _materialID = Renderer::MATERIAL_ID_DO_NOT_BATCH;
    }
    else
    {
        int glProgram = (int)_glProgramState->getGLProgram()->getProgram();
        int intArray[4] = { glProgram, (int)_textureID, (int)_blendType.src, (int)_blendType.dst};
        _materialID = XXH32((const void*)intArray, sizeof(intArray), 0);
    }
}

材料id的生成方法是按照gl shader textureid blandfunc 内存地址连接 再hash 得倒的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值