I'm still trying to understand how this "make a lot of sense" in that context. Care to elaborate ?Wasp wrote:QUOTE (Wasp @ Jul 30 2017, 06:05 PM) Anyhoo, I took this to Imago who revealed that immediate mode was not available in Dx9 and was likely the cause of this. I did a little research and boy did that make a lot of sense (even to me). That explained why, no matter how stripped down and filled with hard coded values, I could not get the Dx9's inputs to be correct.
how retained mode affect the inputs ?
In both cases (DX7 and DX9), Allegiance use a standard simple loop:
A- UpdateInput() - read input values (mouse, js, etc)
B- UpdateFrame() - update the scene (receive network code, update game logic (DoTrekUpdate) , no gfx stuff in here)
C- RenderFrame() - render the frame (immediate mode with DX7, retained mode with DX9, either way a full frame must be drawn before moving to D)
D- Sleep(30 ms) - (this prevents high cpu usage)
then loop to A. The position/orientation of the ship is calculated in B so it should be the same if the input values in A are the same.
The main difference between DX7 and DX9 code is in C (and a bit in A where DirectInput8 is used in place of DirecInput7).
I fail to see how the C step can affect the slew rate when using a js. It's either a timing issue (is C taking too long with DX9 and are some timing values/references absolute instead of relative?) or a code change not related to C was made (<- imho the most probable explanation).
To investigate further here is the whole game "main" loop:
Window::MessageLoop = infinite loop doing:
CallTimers() -> which will process expired/due timers (used for timeout stuff like server not responding for instance)
CallIdleFunctions() -> this calls EngineWindow::DoIdle which does A then B then C then D
ProcessMessage() -> read Win32 message events (handle key strokes)
Now this is complex stuff ,it's not easy to investigate without proper metrics.



