VOGONS

Common searches


First post, by DracoNihil

User metadata
Rank Oldbie
Rank
Oldbie

This is namely in reference to the UTGLR OpenGL for Unreal/Unreal Tournament/Deus Ex, but there's also a few other games I sometimes come across that has this problem.

Everytime my system uptime goes past the 3 days 1 hour mark, the framerate limiter completely malfunctions in spectacularly strange ways, here's a short list of them:

  • Framerate magnitudes worse than specified. (i.e. getting less than 20 FPS even if 60 FPS was the set target)
  • Inexplicable crashes that happen at complete random with no clear pattern to them. (Always of the "Illegal page fault / General Protection Fault" kind)
  • Framerate limiter does absolutely nothing and only VSync has any kind of effect, but with severe microstuttering.

What exactly is broken to cause this behaviour to happen? And is this a problem in the implementation of a particular framerate limiter, or the game executables's main loop?

“I am the dragon without a name…”
― Κυνικός Δράκων

Reply 2 of 6, by DracoNihil

User metadata
Rank Oldbie
Rank
Oldbie

Well, I guess that's one mystery solved and now another mystery... how am I even going to beable to fix every case issue myself if it's "timeGetTime()" causing it.

I can't low-level code to save my life, and Wine doesn't seem to want to make use of "stub DLL's" either. Atleast, everytime I have tried such DLL's don't ever seem to get picked up at all. (Which causes a unrelated problem of the CD Audio replacement player not actually existing in GOG re-releases)

“I am the dragon without a name…”
― Κυνικός Δράκων

Reply 3 of 6, by UCyborg

User metadata
Rank Member
Rank
Member
DracoNihil wrote on 2020-06-02, 16:58:

Wine doesn't seem to want to make use of "stub DLL's" either.)

You have to set DLL load order for DLL in question to native,builtin.

Also, settings on the Libraries tab apply to whatever is selected on the Applications tab.

Arthur Schopenhauer wrote:

A man can be himself only so long as he is alone; and if he does not love solitude, he will not love freedom; for it is only when he is alone that he is really free.

Reply 4 of 6, by Dwedit

User metadata
Rank Newbie
Rank
Newbie
DracoNihil wrote on 2020-06-02, 16:58:

Well, I guess that's one mystery solved and now another mystery... how am I even going to beable to fix every case issue myself if it's "timeGetTime()" causing it.

I can't low-level code to save my life, and Wine doesn't seem to want to make use of "stub DLL's" either. Atleast, everytime I have tried such DLL's don't ever seem to get picked up at all. (Which causes a unrelated problem of the CD Audio replacement player not actually existing in GOG re-releases)

Hello there, saw the thread, and just changed my "GDIStretcher" tool into a timeGetTime patcher tool. If you'd like to see how to make a tool that does this, you can read the source code. I haven't tested this at all, and have no idea if it actually works or not.
The only change it makes to timeGetTime is that it captures the first call, and makes that the zero point. So all subsequent calls will first subtract the first result, thus you should need to run the program itself for 3 days instead of Windows before seeing the negative effects.

Source code: https://github.com/Dwedit/GDIStretcher/tree/t … GetTime-patcher

Filename
TimePatcher.7z
File size
66.48 KiB
Downloads
59 downloads
File comment
TimePatcher Binary
File license
Fair use/fair dealing exception
Last edited by Dwedit on 2020-06-11, 21:05. Edited 1 time in total.

http://www.dwedit.org/

Reply 5 of 6, by UCyborg

User metadata
Rank Member
Rank
Member

You forgot something:

DWORD WINAPI timeGetTime_Replacement()
{
if (!timeInitialized)
{
timeZero = timeGetTime_OLD();
timeInitialized = true;
}
return timeGetTime_OLD() - timeZero;
}
Arthur Schopenhauer wrote:

A man can be himself only so long as he is alone; and if he does not love solitude, he will not love freedom; for it is only when he is alone that he is really free.