Extra2D/src/scene/scene.cpp

79 lines
1.7 KiB
C++

#include <renderer/render_command.h>
#include <renderer/renderer.h>
#include <scene/scene.h>
#include <utils/logger.h>
namespace extra2d {
Scene::Scene() { defaultCamera_ = makePtr<Camera>(); }
void Scene::setCamera(Ptr<Camera> camera) { camera_ = camera; }
void Scene::setViewportSize(float width, float height) {
viewportSize_ = Size(width, height);
if (defaultCamera_) {
defaultCamera_->setViewport(0, width, height, 0);
} else if (camera_) {
camera_->setViewport(0, width, height, 0);
}
}
void Scene::setViewportSize(const Size &size) {
setViewportSize(size.width, size.height);
}
void Scene::renderScene(Renderer &renderer) {
if (!visible())
return;
// Begin frame with background color
renderer.beginFrame(backgroundColor_);
renderContent(renderer);
renderer.endFrame();
}
void Scene::renderContent(Renderer &renderer) {
if (!visible())
return;
// 在渲染前批量更新所有节点的世界变换
batchUpdateTransforms();
Camera *activeCam = getActiveCamera();
if (activeCam) {
renderer.setViewProjection(activeCam->getViewProjectionMatrix());
}
renderer.beginSpriteBatch();
render(renderer);
renderer.endSpriteBatch();
}
void Scene::updateScene(float dt) {
if (!paused_) {
update(dt);
}
}
void Scene::onEnter() {
Node::onEnter();
}
void Scene::onExit() {
Node::onExit();
}
void Scene::collectRenderCommands(std::vector<RenderCommand> &commands,
int parentZOrder) {
if (!visible())
return;
// 从场景的子节点开始收集渲染命令
Node::collectRenderCommands(commands, parentZOrder);
}
Ptr<Scene> Scene::create() { return makePtr<Scene>(); }
} // namespace extra2d