bool RuntimeScene::RenderAndStep() { requestedChange.change = SceneChange::CONTINUE; ManageRenderTargetEvents(); UpdateTime(); ManageObjectsBeforeEvents(); SoundManager::Get()->ManageGarbage(); #if defined(GD_IDE_ONLY) if( GetProfiler() ) { if ( firstLoop ) GetProfiler()->Reset(); GetProfiler()->eventsClock.reset(); } #endif if (GetCodeExecutionEngine()->Ready()) { #if !defined(RELEASE) BT_PROFILE("Events"); #endif GetCodeExecutionEngine()->Execute(); } #if defined(GD_IDE_ONLY) if( GetProfiler() && GetProfiler()->profilingActivated ) { GetProfiler()->lastEventsTime = GetProfiler()->eventsClock.getTimeMicroseconds(); GetProfiler()->renderingClock.reset(); } #endif ManageObjectsAfterEvents(); #if defined(GD_IDE_ONLY) if( debugger ) debugger->Update(); #endif //Rendering Render(); legacyTexts.clear(); #if defined(GD_IDE_ONLY) if( GetProfiler() && GetProfiler()->profilingActivated ) { GetProfiler()->lastRenderingTime = GetProfiler()->renderingClock.getTimeMicroseconds(); GetProfiler()->totalSceneTime += GetProfiler()->lastRenderingTime + GetProfiler()->lastEventsTime; GetProfiler()->totalEventsTime += GetProfiler()->lastEventsTime; GetProfiler()->Update(); } #endif firstLoop = false; //The first frame was rendered return requestedChange.change != SceneChange::CONTINUE; }
bool RuntimeScene::RenderAndStep() { requestedChange.change = SceneChange::CONTINUE; ManageRenderTargetEvents(); timeManager.Update(clock.restart().asMicroseconds(), game->GetMinimumFPS()); ManageObjectsBeforeEvents(); if (game) game->GetSoundManager().ManageGarbage(); #if defined(GD_IDE_ONLY) if( GetProfiler() ) { if ( timeManager.IsFirstLoop() ) GetProfiler()->Reset(); GetProfiler()->eventsClock.reset(); } #endif GetCodeExecutionEngine()->Execute(); #if defined(GD_IDE_ONLY) if( GetProfiler() && GetProfiler()->profilingActivated ) { GetProfiler()->lastEventsTime = GetProfiler()->eventsClock.getTimeMicroseconds(); GetProfiler()->renderingClock.reset(); } #endif ManageObjectsAfterEvents(); #if defined(GD_IDE_ONLY) if( debugger ) debugger->Update(); #endif //Rendering Render(); #if defined(GD_IDE_ONLY) if( GetProfiler() && GetProfiler()->profilingActivated ) { GetProfiler()->lastRenderingTime = GetProfiler()->renderingClock.getTimeMicroseconds(); GetProfiler()->totalSceneTime += GetProfiler()->lastRenderingTime + GetProfiler()->lastEventsTime; GetProfiler()->totalEventsTime += GetProfiler()->lastEventsTime; GetProfiler()->Update(); } #endif return requestedChange.change != SceneChange::CONTINUE; }
std::shared_ptr<RuntimeScene> SceneStack::Push(std::string newSceneName) { auto newScene = std::make_shared<RuntimeScene>(window, &game); if (!newScene->LoadFromScene(game.GetLayout(newSceneName))) { if (errorCallback) errorCallback("Unable to load scene \"" + newSceneName + "\"."); return std::shared_ptr<RuntimeScene>(); } if (!newScene->GetCodeExecutionEngine()->LoadFromDynamicLibrary(codeLibraryName, "GDSceneEvents"+gd::SceneNameMangler::GetMangledSceneName(newScene->GetName()))) { if (errorCallback) errorCallback("Unable to setup execution engine for scene \"" + newScene->GetName() + "\"."); return std::shared_ptr<RuntimeScene>(); } newScene->ChangeRenderWindow(window); stack.push_back(newScene); return newScene; }