2026-03-02 22:44:42 +08:00
|
|
|
#include <assets/assets_module.h>
|
2026-03-02 04:50:28 +08:00
|
|
|
#include <event/events.h>
|
|
|
|
|
#include <scene/components/sprite_renderer.h>
|
|
|
|
|
#include <scene/node.h>
|
|
|
|
|
#include <utils/logger.h>
|
|
|
|
|
|
|
|
|
|
namespace extra2d {
|
|
|
|
|
|
|
|
|
|
SpriteRenderer::SpriteRenderer() {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SpriteRenderer::onAttach(Node *owner) { Component::onAttach(owner); }
|
|
|
|
|
|
2026-03-02 22:44:42 +08:00
|
|
|
void SpriteRenderer::setMaterial(Handle<Material> material) {
|
2026-03-02 04:50:28 +08:00
|
|
|
material_ = material;
|
|
|
|
|
}
|
|
|
|
|
|
2026-03-02 22:44:42 +08:00
|
|
|
void SpriteRenderer::setTexture(Handle<Texture> texture) { texture_ = texture; }
|
2026-03-02 04:50:28 +08:00
|
|
|
|
|
|
|
|
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;
|
|
|
|
|
|
2026-03-02 22:44:42 +08:00
|
|
|
uint32_t materialId = material_.index();
|
|
|
|
|
uint32_t textureId = texture_.index();
|
2026-03-02 04:50:28 +08:00
|
|
|
cmd.sortKey = (materialId << 16) | (textureId & 0xFFFF);
|
|
|
|
|
|
2026-03-02 22:44:42 +08:00
|
|
|
cmd.drawMesh.mesh = MeshHandle::invalid();
|
|
|
|
|
cmd.drawMesh.material = material_.isValid() ? material_ : MaterialHandle::invalid();
|
2026-03-02 04:50:28 +08:00
|
|
|
cmd.setTransform(worldTransform);
|
|
|
|
|
|
|
|
|
|
cmd.setColor(color_);
|
|
|
|
|
|
|
|
|
|
events::OnRenderSubmit::emit(cmd);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
} // namespace extra2d
|