47 lines
1.2 KiB
C++
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
|