Anonymous | Login | Signup for a new account | 2024-10-13 16:12 PDT |
Main | My View | View Issues | Change Log | Roadmap |
View Issue Details [ Jump to Notes ] | [ Issue History ] [ Print ] | ||||||||||
ID | Project | Category | View Status | Date Submitted | Last Update | ||||||
0011871 | Dwarf Fortress | Technical -- Rendering | public | 2022-05-29 09:19 | 2022-06-01 19:09 | ||||||
Reporter | S0ZDATEL | ||||||||||
Assigned To | lethosor | ||||||||||
Priority | low | Severity | trivial | Reproducibility | always | ||||||
Status | acknowledged | Resolution | open | ||||||||
Platform | PC | OS | Windows 10 | OS Version | 21H2 | ||||||
Product Version | 0.47.05 | ||||||||||
Target Version | Fixed in Version | ||||||||||
Summary | 0011871: Too high FPS displayed as negative. | ||||||||||
Description | If your FPS (computational frames per second) are higher than 210000 something, it starts to display as negative and goes to lover absolute value. I got about -47500 FPS. | ||||||||||
Steps To Reproduce | 1) In init.txt options set FPS_CAP to 0 to remove the cap. 2) Start the game. 3) Skip the intro since it's always capped. 4) As soon as the main menu shows up, look at your FPS counter go up to about 210000 and then going negative. | ||||||||||
Additional Information | I'm sure it have something to do with displaying FPS counter as a signed integer. Though 210000 is a strange boundary. What integer size gives you 210000 boundary? The closest I've got is 19 bits, with maximum positive of 262143. But who stores integer in 19 bits? | ||||||||||
Tags | No tags attached. | ||||||||||
Attached Files | |||||||||||
Notes | |
(0041260) lethosor (manager) 2022-06-01 19:09 edited on: 2022-06-28 11:28 |
(Replaced with "FPS" per standard DF terminology.) I was able to reproduce on Linux by editing the FPS and GFPS caps in-memory with DFHack - I also needed to increase my GFPS cap to 363 or higher to see this overflow. This part of DF actually has its source code included in the g_src folder on Linux. The relevant calculation: void enablerst::do_update_fps(queue<int> &q, int &sum, int &last, int &calc) { while (q.size() > 50 && sum > 10000) { sum -= q.front(); q.pop(); } const int now = SDL_GetTicks(); const int interval = now - last; q.push(interval); sum += interval; last = now; if (sum) calc = (int)q.size() * 1000 / sum; } where "calc" is the output parameter that gets displayed on-screen. It's not a single integer that's tracked, so the conditions that cause an overflow are more complicated (but it is not due to being stored as a 19-bit integer or anything like that). |
Issue History | |||
Date Modified | Username | Field | Change |
2022-05-29 09:19 | S0ZDATEL | New Issue | |
2022-06-01 18:54 | lethosor | Summary | Too high UPS displayed as negative. => Too high FPS displayed as negative. |
2022-06-01 18:54 | lethosor | Description Updated | View Revisions |
2022-06-01 18:54 | lethosor | Steps to Reproduce Updated | View Revisions |
2022-06-01 18:54 | lethosor | Additional Information Updated | View Revisions |
2022-06-01 19:09 | lethosor | Note Added: 0041260 | |
2022-06-01 19:09 | lethosor | Assigned To | => lethosor |
2022-06-01 19:09 | lethosor | Status | new => acknowledged |
2022-06-28 11:28 | lethosor | Note Edited: 0041260 | View Revisions |
2022-06-28 11:28 | lethosor | Note Edited: 0041260 | View Revisions |
2022-06-28 11:28 | lethosor | Note Edited: 0041260 | View Revisions |
Copyright © 2000 - 2010 MantisBT Group |