#include #include #include #include namespace extra2d { SpriteRenderer::SpriteRenderer() { // 默认材质和纹理为无效句柄 // 渲染时会使用默认材质 } void SpriteRenderer::onAttach(Node *owner) { Component::onAttach(owner); } void SpriteRenderer::setMaterial(MaterialHandle material) { material_ = material; } void SpriteRenderer::setTexture(TextureHandle texture) { texture_ = texture; } void SpriteRenderer::setColor(const Color &color) { color_ = color; } void SpriteRenderer::render() { if (!isEnabled() || !owner_ || !owner_->isVisible()) { return; } // 获取世界变换(已包含锚点计算) Transform worldTransform = owner_->getWorldTransform(); // 构建渲染命令 RenderCommand cmd; cmd.type = RenderCommandType::DrawMesh; // 计算排序键(简单实现:材质ID + 纹理ID) uint32_t materialId = static_cast(material_ & 0xFFFFFFFF); uint32_t textureId = static_cast(texture_ & 0xFFFFFFFF); cmd.sortKey = (materialId << 16) | (textureId & 0xFFFF); // 设置网格(使用默认四边形) cmd.drawMesh.mesh = INVALID_MESH_HANDLE; // 渲染器会使用默认四边形 cmd.drawMesh.material = material_; cmd.setTransform(worldTransform); // 设置顶点颜色 cmd.setColor(color_); // 提交渲染命令 events::OnRenderSubmit::emit(cmd); } } // namespace extra2d