cocos2d-x Sprite3D 怎么自动合批(auto-batching)?

Sprite3D 怎么自动合批(auto-batching)?

Sprite在 Renderer::drawBatchedTriangles 自动合批

// draw
void Sprite::draw(Renderer *renderer, const Mat4 &transform, uint32_t flags)
{
    // 初始化
        _trianglesCommand.init(_globalZOrder,
                               _texture,
                               _blendFunc,
                               _polyInfo.triangles,
                               transform,
                               flags);
		// 添加到渲染器
        renderer->addCommand(&_trianglesCommand);
}

void Renderer::drawBatchedTriangles()
{

Sprite3D


void Mesh::draw(Renderer* renderer, float globalZOrder, const Mat4& transform, uint32_t flags, unsigned int lightMask, const Vec4& color, bool forceDepthWrite)
{
	_material->draw(commands.data(), globalZ,
                    getVertexBuffer(),
                    getIndexBuffer(),
                    getPrimitiveType(),
                    getIndexFormat(),
                    getIndexCount(),
                    transform);

void Material::draw(MeshCommand* meshCommands, 
	float globalZOrder, 
	backend::Buffer* vertexBuffer, 
	backend::Buffer* indexBuffer,
	CustomCommand::PrimitiveType primitive, 
	CustomCommand::IndexFormat indexFormat,
	unsigned int indexCount, 
	const Mat4& modelView)
{
    int i = 0;
    for (const auto& pass: _currentTechnique->_passes)
    {
		// 遍历所有通道
        pass->draw(&meshCommands[i], globalZOrder, vertexBuffer, indexBuffer,primitive, indexFormat, indexCount, modelView);
        i++;
    }
}

void Pass::draw(
MeshCommand *meshCommand, 
float globalZOrder, 
backend::Buffer* vertexBuffer, 
backend::Buffer* indexBuffer,
MeshCommand::PrimitiveType primitive, 
MeshCommand::IndexFormat indexFormat,
unsigned int indexCount,
const Mat4& modelView)
{
	// 绘制前回调/绘制后回调
    meshCommand->setBeforeCallback(CC_CALLBACK_0(Pass::onBeforeVisitCmd, this, meshCommand));
    meshCommand->setAfterCallback(CC_CALLBACK_0(Pass::onAfterVisitCmd, this, meshCommand));
    meshCommand->init(globalZOrder, modelView);
    meshCommand->setPrimitiveType(primitive);//基元类型
	meshCommand->setIndexBuffer(indexBuffer, indexFormat);//索引缓冲区
    meshCommand->setVertexBuffer(vertexBuffer);//顶点缓冲区
    meshCommand->setIndexDrawInfo(0, indexCount);
    meshCommand->getPipelineDescriptor().programState = _programState;

    auto *renderer = Director::getInstance()->getRenderer();
    renderer->addCommand(meshCommand);
}

//---

void Renderer::drawMeshCommand(RenderCommand *command)
{
    // MeshCommand and CustomCommand are identical while rendering.
	// MeshCommand和CustomCommand在渲染时是完全相同的。
    drawCustomCommand(command);
}
// 绘制自定义命令
void Renderer::drawCustomCommand(RenderCommand *command)
{

Sprite3D怎么自动合批(auto-batching)?

Sprite3D没有找到自动合批的地方,
也没找到能手动合批的方法。

有大佬知道的吗?

想法

由于自己搞了个场景编辑器,场景由很多3D精灵组成,需要合批功能。

  1. 现在的思路是用 Bundle3D 合并多个模型数据成一个再创建一个Sprite3D
  2. 用blender等创建场景,合并
  3. 修改 Renderer::drawMeshCommand (不会)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值