Added workaround to enforce max fps limit. #14
@@ -74,6 +74,23 @@ namespace fps
 | 
				
			|||||||
			++data->index;
 | 
								++data->index;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							void enforce_fps_limit()
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								const auto* maxfps = game::Dvar_FindVar("com_maxfps");
 | 
				
			||||||
 | 
								const auto max = (maxfps) ? std::min(2 * maxfps->current.integer, maxfps->domain.integer.max + 250) : 1250;
 | 
				
			||||||
 | 
								const auto fps = static_cast<std::int32_t>(static_cast<float>(1000.0f /
 | 
				
			||||||
 | 
									static_cast<float>(cg_perf.average)) + 9.313225746154785e-10);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								if (fps > max)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									// workaround to limit fps
 | 
				
			||||||
 | 
									scheduler::once([]()
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										std::this_thread::sleep_for(std::chrono::milliseconds(5));
 | 
				
			||||||
 | 
									}, scheduler::pipeline::renderer);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		void perf_update()
 | 
							void perf_update()
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			cg_perf.count = 32;
 | 
								cg_perf.count = 32;
 | 
				
			||||||
@@ -84,6 +101,7 @@ namespace fps
 | 
				
			|||||||
			cg_perf.previous_ms = cg_perf.current_ms;
 | 
								cg_perf.previous_ms = cg_perf.current_ms;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			perf_calc_fps(&cg_perf, cg_perf.frame_ms);
 | 
								perf_calc_fps(&cg_perf, cg_perf.frame_ms);
 | 
				
			||||||
 | 
								enforce_fps_limit();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			utils::hook::invoke<void>(SELECT_VALUE(0x1405806E0, 0x140658E30));
 | 
								utils::hook::invoke<void>(SELECT_VALUE(0x1405806E0, 0x140658E30));
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user