mirror of
https://github.com/emilk/egui.git
synced 2026-08-29 04:40:03 -04:00
web: Avoid panic from lost texture updates when loaded on a background tab (#8313)
The `textures_delta` in `AppRunner::logic()` comes from `TextureManager::take_delta()` via `end_pass()`. Previously, if `is_visible` was `false`, these deltas would have been dropped and never applied, so the `TextureManager` state gets out of sync with the `Renderer`. That causes https://github.com/emilk/egui/issues/8228: When the app is loaded in a background tab and the first frame occurs via the `setTimeout` path prior to the tab becoming visible, it loses the `ImageDelta` representing the initial creation of the font atlas texture. When the user then switches to the tab, it panics at crates/egui-wgpu/src/renderer.rs:669:18 with `Tried to update a texture that has not been allocated yet` when attempting to update the texture that the wgpu renderer never saw when it was created. Testing: To make it load in a background tab, put `data:text/html,<a href=http://127.0.0.1:8765/>Click</a>` in the address bar and then middle click the resulting link. On Chrome you also have to hover the tab preview before switching to the tab to reproduce the issue. <!-- Please read the "Making a PR" section of [`CONTRIBUTING.md`](https://github.com/emilk/egui/blob/main/CONTRIBUTING.md) before opening a Pull Request! * Keep your PR:s small and focused. * The PR title is what ends up in the changelog, so make it descriptive! * If applicable, add a screenshot or gif. * If it is a non-trivial addition, consider adding a demo for it to `egui_demo_lib`, or a new example. * Do NOT open PR:s from your `master` branch, as that makes it hard for maintainers to test and add commits to your PR. * Remember to run `cargo fmt` and `cargo clippy`. * Open the PR as a draft until you have self-reviewed it and run `./scripts/check.sh`. * When you have addressed a PR comment, mark it as resolved. Please be patient! I will review your PR, but my time is limited! --> * Closes <https://github.com/emilk/egui/issues/8228> and its duplicate https://github.com/emilk/egui/issues/8278 * [x] I have followed the instructions in the PR template Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>
This commit is contained in:
@@ -316,7 +316,7 @@ impl AppRunner {
|
||||
}
|
||||
|
||||
self.handle_platform_output(platform_output);
|
||||
if is_visible {
|
||||
if is_visible || !textures_delta.is_empty() {
|
||||
self.textures_delta.append(textures_delta);
|
||||
self.clipped_primitives = Some(self.egui_ctx.tessellate(shapes, pixels_per_point));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user