Extra2D/src/scene/components/sprite_renderer.cpp

47 lines
1.2 KiB
C++

#include <assets/assets_module.h>
#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); }
void SpriteRenderer::setMaterial(Handle<Material> material) {
material_ = material;
}
void SpriteRenderer::setTexture(Handle<Texture> 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;
uint32_t materialId = material_.index();
uint32_t textureId = texture_.index();
cmd.sortKey = (materialId << 16) | (textureId & 0xFFFF);
// 如果没有指定网格,使用默认的四边形网格
cmd.drawMesh.mesh = Handle<Mesh>::invalid(); // RendererModule 会使用默认网格
cmd.drawMesh.material = material_.isValid() ? material_ : Handle<Material>::invalid();
cmd.setTransform(worldTransform);
cmd.setColor(color_);
events::OnRenderSubmit::emit(cmd);
}
} // namespace extra2d