| 2124 | } |
| 2125 | |
| 2126 | void IMGUIManager::Update() |
| 2127 | { |
| 2128 | if (!enableUI_ |
| 2129 | || !initialized_ |
| 2130 | || !objects_ |
| 2131 | || !renderer_->IsInitialized()) { |
| 2132 | |
| 2133 | IMGUI_FRAME_DEBUG("Skip drawing - enableUI %d, initialized %d, objects %d, rendererInitialized %d", |
| 2134 | enableUI_ ? 1 : 0, initialized_ ? 1 : 0, objects_ ? 1 : 0, renderer_->IsInitialized() ? 1 : 0); |
| 2135 | frameNo_++; |
| 2136 | return; |
| 2137 | } |
| 2138 | |
| 2139 | OPTICK_EVENT("IMGUI Update"); |
| 2140 | if (scale_ != requestedScale_ |
| 2141 | || uiScaleMultiplier_ != requestedUiScaleMultiplier_ |
| 2142 | || fontScaleMultiplier_ != requestedFontScaleMultiplier_) { |
| 2143 | UpdateStyle(); |
| 2144 | } |
| 2145 | |
| 2146 | { |
| 2147 | OPTICK_EVENT("SDL New Frame", Optick::Category::Rendering); |
| 2148 | std::lock_guard _(sdl_.GetSDLMutex()); |
| 2149 | sdl_.NewFrame(); |
| 2150 | } |
| 2151 | |
| 2152 | auto defaultFont = GetFont(GFS.strMedium); |
| 2153 | if (defaultFont != nullptr && defaultFont->Font != nullptr) { |
| 2154 | ImGui::GetIO().FontDefault = defaultFont->Font; |
| 2155 | } |
| 2156 | |
| 2157 | if (frameNo_ == 0) { |
| 2158 | IMGUI_DEBUG("Draw initial frame"); |
| 2159 | } |
| 2160 | |
| 2161 | frameNo_++; |
| 2162 | |
| 2163 | textureLoader_.Update(); |
| 2164 | renderer_->NewFrame(); |
| 2165 | ImGui::NewFrame(); |
| 2166 | |
| 2167 | DrawingContext dc{ |
| 2168 | .UIScale = scale_ |
| 2169 | }; |
| 2170 | objects_->Render(dc); |
| 2171 | se_assert(dc.ScalingStack.empty()); |
| 2172 | |
| 2173 | { |
| 2174 | OPTICK_EVENT("IMGUI Render", Optick::Category::Rendering); |
| 2175 | ImGui::Render(); |
| 2176 | } |
| 2177 | |
| 2178 | renderer_->FinishFrame(); |
| 2179 | |
| 2180 | objects_->ClientUpdate(); |
| 2181 | } |
| 2182 | |
| 2183 | void IMGUITextureLoader::BindRenderer(RenderingBackend* renderer) |
no test coverage detected