wip low fps mode for hidden states and powersave modes.
dont use yet, as all compute is still done in the render method
This commit is contained in:
@ -78,6 +78,41 @@ bool MainScreen::handleEvent(SDL_Event& e) {
|
||||
return true; // TODO: forward return succ from sendFilePath()
|
||||
}
|
||||
|
||||
if (
|
||||
e.type == SDL_EVENT_WINDOW_MINIMIZED ||
|
||||
e.type == SDL_EVENT_WINDOW_HIDDEN ||
|
||||
e.type == SDL_EVENT_WINDOW_OCCLUDED // does this trigger on partial occlusion?
|
||||
) {
|
||||
auto* window = SDL_GetWindowFromID(e.window.windowID);
|
||||
auto* event_renderer = SDL_GetRenderer(window);
|
||||
if (event_renderer != nullptr && event_renderer == renderer) {
|
||||
// our window is now obstructed
|
||||
if (_window_hidden_ts < e.window.timestamp) {
|
||||
_window_hidden_ts = e.window.timestamp;
|
||||
_window_hidden = true;
|
||||
//std::cout << "TOMAT: window hidden " << e.window.timestamp << "\n";
|
||||
}
|
||||
}
|
||||
return true; // forward?
|
||||
}
|
||||
|
||||
if (
|
||||
e.type == SDL_EVENT_WINDOW_SHOWN ||
|
||||
e.type == SDL_EVENT_WINDOW_RESTORED ||
|
||||
e.type == SDL_EVENT_WINDOW_EXPOSED
|
||||
) {
|
||||
auto* window = SDL_GetWindowFromID(e.window.windowID);
|
||||
auto* event_renderer = SDL_GetRenderer(window);
|
||||
if (event_renderer != nullptr && event_renderer == renderer) {
|
||||
if (_window_hidden_ts <= e.window.timestamp) {
|
||||
_window_hidden_ts = e.window.timestamp;
|
||||
_window_hidden = false;
|
||||
//std::cout << "TOMAT: window shown " << e.window.timestamp << "\n";
|
||||
}
|
||||
}
|
||||
return true; // forward?
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -115,17 +150,57 @@ Screen* MainScreen::render(float time_delta, bool& quit) {
|
||||
tuiu.render();
|
||||
tdch.render();
|
||||
|
||||
{ // main window menubar injection
|
||||
if (ImGui::Begin("tomato")) {
|
||||
if (ImGui::BeginMenuBar()) {
|
||||
// ImGui::Separator(); // why do we not need this????
|
||||
if (ImGui::BeginMenu("Performance")) {
|
||||
{ // fps
|
||||
const auto targets = "normal\0power save\0";
|
||||
ImGui::SetNextItemWidth(ImGui::GetFontSize()*10);
|
||||
ImGui::Combo("fps mode", &_fps_perf_mode, targets, 4);
|
||||
}
|
||||
|
||||
{ // compute
|
||||
const auto targets = "normal\0power save\0";
|
||||
ImGui::SetNextItemWidth(ImGui::GetFontSize()*10);
|
||||
ImGui::Combo("compute mode", &_compute_perf_mode, targets, 4);
|
||||
ImGui::SetItemTooltip("Limiting compute can slow down things filetransfers.");
|
||||
}
|
||||
|
||||
ImGui::EndMenu();
|
||||
}
|
||||
ImGui::EndMenuBar();
|
||||
}
|
||||
|
||||
}
|
||||
ImGui::End();
|
||||
}
|
||||
|
||||
|
||||
if constexpr (false) {
|
||||
ImGui::ShowDemoWindow();
|
||||
}
|
||||
|
||||
if (
|
||||
_fps_perf_mode == 1 || // TODO: magic
|
||||
_window_hidden
|
||||
) {
|
||||
_render_interval = 1.f/4.f;
|
||||
} else {
|
||||
_render_interval = 1.f/60.f;
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
Screen* MainScreen::tick(float time_delta, bool& quit) {
|
||||
_min_tick_interval = std::min<float>(
|
||||
tc.toxIterationInterval()/1000.f,
|
||||
0.03f // HACK: 30ms upper bound, should be the same as tox but will change
|
||||
_min_tick_interval = std::max<float>(
|
||||
std::min<float>(
|
||||
tc.toxIterationInterval()/1000.f,
|
||||
0.03f // HACK: 30ms upper bound, should be the same as tox but will change
|
||||
),
|
||||
(_compute_perf_mode == 0 ? 0.001f : 0.1f) // in powersave fix the lowerbound to 100ms
|
||||
);
|
||||
|
||||
return nullptr;
|
||||
|
Reference in New Issue
Block a user