fix: start stream with graph enabled and metal doesn't show the graph

This commit is contained in:
Acaki
2025-08-07 04:25:15 +08:00
parent 76f765ce5f
commit 69026cbcd6
@@ -399,12 +399,26 @@
[self.imguiView.mtkView removeFromSuperview];
self.imguiView = nil;
}
self.imguiView = [[ImGuiRenderer alloc] initWithFrame:self.view.bounds
streamFps:[_settings.framerate intValue]
enableGraphs:_settings.enableGraphs
graphOpacity:[_settings.graphOpacity intValue]];
self.imguiView.mtkView.userInteractionEnabled = NO;
[self.view addSubview:self.imguiView.mtkView];
// Only create ImGui view if it doesn't exist or we're not using Metal rendering
// (Metal rendering creates it earlier in viewDidLoad)
if (!self.imguiView || [_settings.renderingBackend intValue] != RENDER_METAL) {
self.imguiView = [[ImGuiRenderer alloc] initWithFrame:self.view.bounds
streamFps:[_settings.framerate intValue]
enableGraphs:_settings.enableGraphs
graphOpacity:[_settings.graphOpacity intValue]];
self.imguiView.mtkView.userInteractionEnabled = NO;
[self.view addSubview:self.imguiView.mtkView];
} else {
// Update settings for existing ImGui view
self.imguiView.enableGraphs = _settings.enableGraphs;
self.imguiView.graphOpacity = [_settings.graphOpacity intValue] / 100.0f;
if (_settings.enableGraphs) {
[self.imguiView start];
} else {
[self.imguiView hide];
}
}
// Ensure views are layered correctly
if (self.metalViewController && self.metalViewController.view.superview) {
@@ -711,6 +725,16 @@
[self.view addSubview:_tipLabel];
if ([_settings.renderingBackend intValue] == RENDER_METAL) {
// Create ImGui view first to get the metrics handler
if (!self.imguiView) {
self.imguiView = [[ImGuiRenderer alloc] initWithFrame:self.view.bounds
streamFps:[_settings.framerate intValue]
enableGraphs:_settings.enableGraphs
graphOpacity:[_settings.graphOpacity intValue]];
self.imguiView.mtkView.userInteractionEnabled = NO;
[self.view addSubview:self.imguiView.mtkView];
}
// Metal view for video
Log(LOG_I, @"StreamFrameViewController creating MetalViewController");
self.metalViewController = [[MetalViewController alloc] initWithFrame:self.view.bounds
@@ -722,6 +746,11 @@
[self.view addSubview:self.metalViewController.view];
[self.metalViewController didMoveToParentViewController:self];
[self.view bringSubviewToFront:self.metalViewController.view];
// Ensure ImGui view is on top of Metal view for graphs to be visible
if (self.imguiView && self.imguiView.mtkView.superview) {
[self.view bringSubviewToFront:self.imguiView.mtkView];
}
}
}