diff --git a/examples/image_display_demo/main.cpp b/examples/image_display_demo/main.cpp index f01fed2..9438d54 100644 --- a/examples/image_display_demo/main.cpp +++ b/examples/image_display_demo/main.cpp @@ -1,4 +1,5 @@ #include +#include #include #include @@ -10,13 +11,30 @@ public: Scene::onEnter(); createCamera(); createImageSprite(); + onRenderBeginListener_.bind([this]() { trySetupTexture(); }); } - void update(float dt) override { - Scene::update(dt); + 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("assets/test.png"); + if (texture.isValid()) { + spriteRenderer_->setTexture(texture); + onRenderBeginListener_.reset(); + } + } void createCamera() { auto cameraNode = makePtr(); cameraNode->setName("MainCamera"); @@ -29,9 +47,6 @@ private: } void createImageSprite() { - auto assets = getAssets(); - auto texture = assets->load("assets/test.png"); - auto spriteNode = makePtr(); spriteNode->setName("ImageSprite"); spriteNode->setPosition(640.0f, 360.0f); @@ -39,11 +54,9 @@ private: spriteRenderer_ = makePtr(); spriteNode->addComponent(spriteRenderer_); addChild(spriteNode); - if (texture.isValid()) { - spriteRenderer_->setTexture(texture); - } } Ptr spriteRenderer_; + events::OnRenderBegin::Listener onRenderBeginListener_; }; int main(int argc, char **argv) {