栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 游戏开发 > 其他

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

其他 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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 (不会)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/901890.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号