Extra2D/examples/image_display_demo/main.cpp

84 lines
2.0 KiB
C++
Raw Normal View History

#include <cstdio>
#include <event/events.h>
#include <extra2d.h>
#include <renderer/rhi_module.h>
using namespace extra2d;
class ImageDisplayScene : public Scene {
public:
void onEnter() override {
Scene::onEnter();
createCamera();
createImageSprite();
onRenderBeginListener_.bind([this]() { trySetupTexture(); });
}
void onExit() override {
onRenderBeginListener_.reset();
Scene::onExit();
}
private:
void trySetupTexture() {
auto *rhiModule = RHIModule::get();
if (!rhiModule || !rhiModule->getDevice()) {
return;
}
auto assets = getAssets();
if (!assets || !spriteRenderer_) {
return;
}
auto texture = assets->load<Texture>("assets/test.png");
if (texture.isValid()) {
spriteRenderer_->setTexture(texture);
onRenderBeginListener_.reset();
}
}
void createCamera() {
auto cameraNode = makePtr<Node>();
cameraNode->setName("MainCamera");
cameraNode->setPosition(0.0f, 0.0f);
auto camera = makePtr<CameraComponent>();
camera->setOrtho(1280.0f, 720.0f);
cameraNode->addComponent(camera);
setMainCamera(camera);
addChild(cameraNode);
}
void createImageSprite() {
auto spriteNode = makePtr<Node>();
spriteNode->setName("ImageSprite");
spriteNode->setPosition(640.0f, 360.0f);
spriteNode->setAnchor(0.5f, 0.5f);
spriteRenderer_ = makePtr<SpriteRenderer>();
spriteNode->addComponent(spriteRenderer_);
addChild(spriteNode);
}
Ptr<SpriteRenderer> spriteRenderer_;
events::OnRenderBegin::Listener onRenderBeginListener_;
};
int main(int argc, char **argv) {
auto app = Application::create();
AppConfig config;
config.title = "Image Display Demo - Extra2D";
config.width = 1280;
config.height = 720;
if (!app->init(config)) {
printf("应用程序初始化失败!\n");
return -1;
}
auto director = app->getModule<SceneModule>()->getDirector();
if (!director) {
printf("获取导演器失败!\n");
return -1;
}
director->runScene(makePtr<ImageDisplayScene>());
app->run();
return 0;
}