Multiplayer Lite

OHM Multiplayer Lite 0.3

WingC3

Donator
Donator
Joined
Feb 10, 2022
Messages
106
Reaction score
35
Points
28
Location
UK
Usually the scenario saving callback is used as a trick to gather internal vessel information. This information is then transferred to the other client and applied by means of using the loading callback. If done in the render loop thread, it will often cause Orbiter to stutter. Best practice here is to decouple it from the render loop, but this is no silver bullet, either.
Hi @Face , What's your opinion about how often this method should be called in order to meet this use case? Given that most users don't add or remove vessels once they load in, wouldn't it be sufficient to simply call it once per client connect/disconnect? (And btw @nbcfrosty I think the addon should clean up the scenario when clients disconnect for more than 30-45 seconds, rather than leaving inactive ships. You can always spawn them back in if they reconnect)
Given that there are rarely more than 3 people simultaneously online, that should keep the stutters to a MUCH lower number than 1 per 5 seconds.
Of course, this doesn't scale well if the addon becomes very popular, but it would make a big difference for now.

Or is this method also used to retrieve the animation state of vessel components, thus requiring more frequent calls?

If the latter, how is nbcfrosty achieving a 1Hz update rate for vessels if he is only getting updated information from the scenario files at 1/5Hz?



Curious to hear your thoughts.
 
Last edited:

Face

Well-known member
Orbiter Contributor
Addon Developer
Beta Tester
Joined
Mar 18, 2008
Messages
4,406
Reaction score
588
Points
153
Location
Vienna
Hi @Face , What's your opinion about how often this method should be called in order to meet this use case? Given that most users don't add or remove vessels once they load in, wouldn't it be sufficient to simply call it once per client connect/disconnect? (And btw @nbcfrosty I think the addon should clean up the scenario when clients disconnect for more than 30-45 seconds, rather than leaving inactive ships. You can always spawn them back in if they reconnect)
Given that there are rarely more than 3 people simultaneously online, that should keep the stutters to a MUCH lower number than 1 per 5 seconds.
Of course, this doesn't scale well if the addon becomes very popular, but it would make a big difference for now.

Or is this method also used to retrieve the animation state of vessel components, thus requiring more frequent calls?

If the latter, how is nbcfrosty achieving a 1Hz update rate for vessels if he is only getting updated information from the scenario files at 1/5Hz?
I think this is a bit of a misunderstanding. The save/load callback is normally not there to get state vectors or even just vessel existence, but to get internal state data of the vessel classes. You see, state vectors, animation states, fuel status and all that stuff can be retrieved programmatically from the general vessel interface for every vessel class. However, there are many features implemented inside of the vessel DLL, and thus Orbiter (and by extension the multiplayer framework) doesn't have direct access to it. Still you want those internal states being propagated between machines in order to provide a good user experience for things like nose cone animation, RMS operation etc. This is where that save/load trick comes in: at regular trigger points (nbcfrosty chose a simple 5 seconds timer as it seems), the save call is done for the local vessels, the resulting temporary file is read (probably only the custom entries are parsed), transmitted to the other client, and there applied to the load callback so the vessel's regular code can deal with it.
Thus you can have a high-frequency state vector pump and a low-frequency transmission for the internal states. The adding/removing of vessels plays usually no part in this.

As I wrote, best practice is to have the save/load dance decoupled from the render loop (aka multithreading) to avoid stutter. I'd also suggest to hook the event recording API function in order to have an event-driven internal states transmission instead of a time-triggered one. Since we are talking about states, you only have to transmit changes. The event recording is a good indicator for those state changes.
 

nbcfrosty

Well-known member
Joined
Jun 16, 2023
Messages
187
Reaction score
218
Points
58
Location
US
As I wrote, best practice is to have the save/load dance decoupled from the render loop (aka multithreading) to avoid stutter

Hey face. Can I safely call oapiSaveState from a thread other than orbiter's main thread? I didn't know this was safely doable?
 

Face

Well-known member
Orbiter Contributor
Addon Developer
Beta Tester
Joined
Mar 18, 2008
Messages
4,406
Reaction score
588
Points
153
Location
Vienna
Hey face. Can I safely call oapiSaveState from a thread other than orbiter's main thread? I didn't know this was safely doable?
That's basically why I said "no silver bullet either". It depends on the vessel implementation, so you can't deem it safe per se. But then again, nothing is really perfectly thread-safe, anyway.
In OMP we had 2 variants, one synchronized by critical sections, one completely free. Both kind of worked, at least there was no stuttering from the API calls. But of course we had event-triggering there and no message pump.
 

nbcfrosty

Well-known member
Joined
Jun 16, 2023
Messages
187
Reaction score
218
Points
58
Location
US
I have 1 thread for high frequency websocket updates, and another thread for low frequency state transfer network IO. I was calling oapiSaveScenario every 5 seconds in opcPreStep. I just tried calling oapiSaveScenario in the network IO thread and it hangs/blocks the thread... oapiSaveScenario never returns as per debugger, my thread's join never gets called/returns in cleanup when Orbiter is exitting preventing Orbiter from closing. Just using std::thread, not sure how it's working in OMP?

Reason tells me that oapiSaveScenario from an external thread is bad because Orbiter api is not thread safe afaik. But I am not well versed in multithreading.. It sucks Orbiter is scanning file tree on oapiSaveScenario, you'd think this would be a relatively efficient/fast function. I tested this in Open Orbiter and no stutter, and I believe Orbiter 2010 doesn't have this behavior either.

And I don't know any other way of getting internal vessel state either besides oapiSaveScenario. Maybe only option is to disable for Orbiter 2016?

In OMP we had 2 variants, one synchronized by critical sections

What was the point of synchronization? For example, I copy client's local state in opcPreStep and store it, and lock around access to where this state is stored using critical section, the state is accessed/pushed in the high frequency update thread. So a set of enter/leave critical section calls in opcPreStep, and a set in the external thread to access. How would I lock/sync oapiSaveScenario?
 
Last edited:

Face

Well-known member
Orbiter Contributor
Addon Developer
Beta Tester
Joined
Mar 18, 2008
Messages
4,406
Reaction score
588
Points
153
Location
Vienna
I was not talking about oapiSaveScenario, but about clbkSaveState of individual vessels. OMP never used oapiSaveScenario.
 

nbcfrosty

Well-known member
Joined
Jun 16, 2023
Messages
187
Reaction score
218
Points
58
Location
US
I was not talking about oapiSaveScenario, but about clbkSaveState of individual vessels. OMP never used oapiSaveScenario.

I tried this today, by first creating a temp file with fopen with mode 'w', getting FILEHANDLE via oapiOpenFile, passing that into clbkSaveState but didn't work, Orbiter never wrote into it. I was trying to find clbkSaveState in https://gitlab.com/SecretBoxx/omx/-/releases/OMX_1.1.0
but was unable to find reference to string "clbkSaveState" via search in vs code.

Would appreciate a nudge in the right direction, wasn't able to find clbkSaveState or oapiSaveScenario reference anywhere.

edit:

NVM. Found it here: https://gitlab.com/SecretBoxx/omx/-...e819ec99c76afd783540e/OMPClient/OMPClient.cpp
 

nbcfrosty

Well-known member
Joined
Jun 16, 2023
Messages
187
Reaction score
218
Points
58
Location
US
Looking at OMP sources, seems A LOT of oapi calls are done with locking using orbiter critical section.. In my client I am buffering local state updates and remote updates into a synchronized store which is accessed by both Orbiter thread and my threads, and it's access is locked.

Wouldn't have done it like that if I knew I can just call oapi from external threads. Oh well! I'll give this a shot!
 

Face

Well-known member
Orbiter Contributor
Addon Developer
Beta Tester
Joined
Mar 18, 2008
Messages
4,406
Reaction score
588
Points
153
Location
Vienna
Yeah, keep in mind that Boxx's OMX is inherited from OMP, but in further development. It could be that what you see there is vastly different to the original code. I'm not familiar with OMX details.
 

Face

Well-known member
Orbiter Contributor
Addon Developer
Beta Tester
Joined
Mar 18, 2008
Messages
4,406
Reaction score
588
Points
153
Location
Vienna
Looking at OMP sources, seems A LOT of oapi calls are done with locking using orbiter critical section.. In my client I am buffering local state updates and remote updates into a synchronized store which is accessed by both Orbiter thread and my threads, and it's access is locked.

Wouldn't have done it like that if I knew I can just call oapi from external threads. Oh well! I'll give this a shot!
To be honest, I was never happy with that detail of OMP. Having a central store and doing things directly in the render loop is functionally equivalent to doing it in many threads and interlocking. The central store is a cleaner pattern, but more rigid. The multithreading pattern can get very chaotic, but it is versatile. In my current prototype implementation, I also use a central store.
 

nbcfrosty

Well-known member
Joined
Jun 16, 2023
Messages
187
Reaction score
218
Points
58
Location
US
Nice, seems there is no noticeable lag when using clbkSaveState. Thank you :hailprobe:

Having a central store and doing things directly in the render loop is functionally equivalent to doing it in many threads and interlocking.

I just make sure all oapi functions are called in opcPreStep and results are saved to be used by other threads.
 

Attachments

  • multiplayer-lite-websocket-animation-sync-without-lag.zip
    417.9 KB · Views: 3
Last edited:

Boxx

Mars Addict
Addon Developer
Donator
Joined
Nov 15, 2009
Messages
221
Reaction score
143
Points
58
Location
Paris Area
there are many features implemented inside of the vessel DLL, and thus Orbiter (and by extension the multiplayer framework) doesn't have direct access to it.
And that's fine as it is, IMO.

I was trying to find clbkSaveState in https://gitlab.com/SecretBoxx/omx/-/releases/OMX_1.1.0
but was unable to find reference to string "clbkSaveState" via search in vs code.
in OMX, I don't use this management anymore, see rather STC_Vessels.cpp in the 1.1.0 release. My approach is to only save what I need to transfer and nothing more. In particular thrusters and fuel when a client needs to TRANSFER its vessel to another client, then leave it there after disconnecting (because OMX is oriented to a persistent universe, hence different purpose than this "Lite" multiuser approach, that is cool anyway...).

A drawback is that it is not universal, each vessel class needs validation & adaptation, which is not my very 1st priority compared to disconnection tolerance.

this is OMP 0.8.2, initial fork.

Additionnaly, I had a few nightmares at dealing with critical sections when I implemented the "transfer" features (still not satisfactory, btw). For sure, OMP/OMX client can be greatly simplified, as well the server. I will start a thread about that.
 

WingC3

Donator
Donator
Joined
Feb 10, 2022
Messages
106
Reaction score
35
Points
28
Location
UK
@nbcfrosty Have a check for memory leaks in the module, if you don't mind. I seem to be getting a crash after about 2 hours of playtime when the newest version of the module is active. Not occuring if I disable it. Not guaranteed causality, but it might not hurt to look.
 

nbcfrosty

Well-known member
Joined
Jun 16, 2023
Messages
187
Reaction score
218
Points
58
Location
US
@nbcfrosty Have a check for memory leaks in the module, if you don't mind. I seem to be getting a crash after about 2 hours of playtime when the newest version of the module is active. Not occuring if I disable it. Not guaranteed causality, but it might not hurt to look.

Hello. Is this reliably reproducible? I can run it in debugger and see if it crashes. Had a pretty long flight yesterday from Phobos to Mars and no crashes, although it was only 1 hour. Always 2 hours? I'll give it another look over, thank you for report!
 

WingC3

Donator
Donator
Joined
Feb 10, 2022
Messages
106
Reaction score
35
Points
28
Location
UK
Hello. Is this reliably reproducible? I can run it in debugger and see if it crashes. Had a pretty long flight yesterday from Phobos to Mars and no crashes, although it was only 1 hour. Always 2 hours? I'll give it another look over, thank you for report!
Because of the time scales involved, I'd have to say that it's not reliable. It would take a long time to do a number of trials.
 

EarthMoon

The Earth and the Moon
Joined
Jul 12, 2022
Messages
54
Reaction score
38
Points
18
Location
Germany
Preferred Pronouns
He, His, Him or You, Your, Yours
Hi,

I have installed (and activated!) multiplayer-lite 0.2 on Orbiter 2016 but whenever I try to load a scenario, the program crashes to desktop. It happens on all scenarios.

Here is a video showing the issue (you may have to change quality to best and enable fullscreen to view it):

The addon file has been ordinarily extracted into the Orbiter 2016 root folder, the module is where it should be.

The orbiter.log (of the second test in the video above):

**** Orbiter.log
000000.000: Build Aug 28 2016 [v.160828]
000000.000: Timer precision: 1e-007 sec
000000.000: Found 0 joystick(s)
000000.000: Devices enumerated: 6
000000.000: Devices accepted: 5
000000.000: [ ] RGB Emulation (SW)
000000.000: [ ] Direct3D HAL (HW)
000000.000: [x] Direct3D T&L HAL (HW)
000000.000: [ ] Direct3D HAL (Intel(R) UHD Graphics 630) (HW)
000000.000: [x] Direct3D T&L HAL (Intel(R) UHD Graphics 630) (HW)
000000.000: Module AtlantisConfig.dll .... [Build 160828, API 160828]
000000.000: Module AtmConfig.dll ......... [Build 160828, API 160828]
000000.000: Module DGConfigurator.dll .... [Build 160828, API 160828]
000000.000: Module CustomMFD.dll ......... [Build 160828, API 160828]
000000.000: Module LuaMFD.dll ............ [Build 160828, API 160828]
000000.000: Module transx.dll ............ [Build 160216, API 160214]
000000.000: Module TrackIR.dll ........... [Build 160828, API 160828]
000000.000: TrackIR module not found.
000000.000: Module LuaConsole.dll ........ [Build 160828, API 160828]
000000.000: Module ScriptMFD.dll ......... [Build 160828, API 160828]
000000.000: Module ExtMFD.dll ............ [Build 160828, API 160828]
000000.000: Module FlightData.dll ........ [Build 160828, API 160828]
000000.000: Module Rcontrol.dll .......... [Build 160828, API 160828]
000000.000: Module Framerate.dll ......... [Build 160828, API 160828]
000000.000: Module Meshdebug.dll ......... [Build 160828, API 160828]
000000.000: Module ScnEditor.dll ......... [Build 160828, API 160828]
============================ ERROR: ===========================
Failed loading module Modules\Plugin\Lagrange.dll (code 126)
[Orbiter::LoadModule | .\Orbiter.cpp | 600]
===============================================================
============================ ERROR: ===========================
Failed loading module Modules\Plugin\OrbiterSound.dll (code 126)
[Orbiter::LoadModule | .\Orbiter.cpp | 600]
===============================================================
000000.000: Module multiplayer-lite.dll .. [Build 240316, API 160828]
000000.000: ---------------------------------------------------------------
000000.000: >>> WARNING: Obsolete API function used: oapiRegisterMFDMode
000000.000: At least one active module is accessing an obsolete interface function.
000000.000: Addons which rely on obsolete functions may not be compatible with
000000.000: future versions of Orbiter.
000000.000: ---------------------------------------------------------------
000000.000:
000000.000: **** Creating simulation session
000000.000: DirectDraw interface OK
000000.000: Direct3D interface OK
000000.000: Graphics: Viewport: Window 1274 x 771 x 32
000000.000: Graphics: Hardware T&L capability: Yes
000000.000: Graphics: Z-buffer depth: 32 bit
000000.000: Graphics: Active lights supported: 8
000000.000: Loading 15382 records from star database
000000.000: ---------------------------------------------------------------
000000.000: >>> ERROR: DDraw error DDERR_BLTFASTCANTCLIP
000000.000: >>> [OrbiterGraphics::clbkBlt | .\OGraphics.cpp | 1633]
000000.000: ---------------------------------------------------------------
000000.000: Module Sun.dll ............... [Build 160828, API 160828]
VSOP87(E) Sun: Precision 1e-006, Terms 554/6634
000000.000: Module Mercury.dll ........... [Build 160828, API 160828]
VSOP87(B) Mercury: Precision 1e-005, Terms 167/7123
000000.000: Module Venus.dll ............. [Build 160828, API 160828]
000000.000: Module VenusAtm2006.dll ...... [Build 160828, API 160828]
VSOP87(B) Venus: Precision 1e-005, Terms 79/1710
000000.000: Module Earth.dll ............. [Build 160828, API 160828]
000000.000: Module EarthAtm2006.dll ...... [Build 160828, API 160828]
VSOP87(B) Earth: Precision 1e-008, Terms 2564/2564
000000.000: Module Moon.dll .............. [Build 160828, API 160828]
ELP82: Precision 1e-005, Terms 116/829
000000.000: Module Mars.dll .............. [Build 160828, API 160828]
000000.000: Module MarsAtm2006.dll ....... [Build 160828, API 160828]
VSOP87(B) Mars: Precision 1e-005, Terms 405/6400
000000.000: Module Phobos.dll ............ [Build ******, API 060425]
000000.000: Module Deimos.dll ............ [Build ******, API 060425]
000000.000: Module Galsat.dll ............ [Build 160828, API 160828]
000000.000: Module Jupiter.dll ........... [Build 160828, API 160828]
VSOP87(B) Jupiter: Precision 1e-006, Terms 1624/3625
000000.000: Module Io.dll ................ [Build 160828, API 160828]
000000.000: Module Europa.dll ............ [Build 160828, API 160828]
000000.000: Module Ganymede.dll .......... [Build 160828, API 160828]
000000.000: Module Callisto.dll .......... [Build 160828, API 160828]
000000.000: Module Satsat.dll ............ [Build 160828, API 160828]
000000.000: Module Saturn.dll ............ [Build 160828, API 160828]
VSOP87(B) Saturn: Precision 1e-006, Terms 2904/6365
000000.000: Module Mimas.dll ............. [Build 160828, API 160828]
SATSAT Mimas: Terms 113
000000.000: Module Enceladus.dll ......... [Build 160828, API 160828]
SATSAT Enceladus: Terms 33
000000.000: Module Tethys.dll ............ [Build 160828, API 160828]
SATSAT Tethys: Terms 101
000000.000: Module Dione.dll ............. [Build 160828, API 160828]
SATSAT Dione: Terms 59
000000.000: Module Rhea.dll .............. [Build 160828, API 160828]
SATSAT Rhea: Terms 68
000000.000: Module Titan.dll ............. [Build 160828, API 160828]
SATSAT Titan: Terms 100
000000.000: Module Iapetus.dll ........... [Build 160828, API 160828]
SATSAT Iapetus: Terms 605
000000.000: Module Uranus.dll ............ [Build 160828, API 160828]
VSOP87(B) Uranus: Precision 1e-006, Terms 1827/5269
000000.000: Module Miranda.dll ........... [Build ******, API 060425]
000000.000: Module Ariel.dll ............. [Build ******, API 060425]
000000.000: Module Umbriel.dll ........... [Build ******, API 060425]
000000.000: Module Titania.dll ........... [Build ******, API 060425]
000000.000: Module Oberon.dll ............ [Build ******, API 060425]
000000.000: Module Neptune.dll ........... [Build 160828, API 160828]
VSOP87(B) Neptune: Precision 1e-006, Terms 391/2024
000000.000: Finished initialising world
000000.000: Module Atlantis_SRB.dll ...... [Build 160828, API 160828]
000000.000: Module Atlantis_Tank.dll ..... [Build 160828, API 160828]
000000.000: Module Atlantis.dll .......... [Build 160828, API 160828]
000000.000: ---------------------------------------------------------------
000000.000: >>> WARNING: Obsolete API function used: VESSEL::CreateVariableDragElement
000000.000: At least one active module is accessing an obsolete interface function.
000000.000: Addons which rely on obsolete functions may not be compatible with
000000.000: future versions of Orbiter.
000000.000: ---------------------------------------------------------------
000000.000: Module ShuttleA.dll .......... [Build 160828, API 160828]
000000.000: Finished initialising status
000000.000: Finished initialising camera
000000.000: Finished setting up render state
000000.000: Finished initialising panels

So, based on what I can see in the log, the addon uses obsolete Orbiter API functions (which just blows up the log for no reason) ...

(Downloaded from: https://www.orbiter-forum.com/resources/multiplayer-lite.5562/history (0.2))
 
Last edited:

nbcfrosty

Well-known member
Joined
Jun 16, 2023
Messages
187
Reaction score
218
Points
58
Location
US
Hi,

I have installed (and activated!) multiplayer-lite 0.2 on Orbiter 2016 but whenever I try to load a scenario, the program crashes to desktop. It happens on all scenarios.

Here is a video showing the issue (you may have to change quality to best and enable fullscreen to view it):

The addon file has been ordinarily extracted into the Orbiter 2016 root folder, the module is where it should be.

The orbiter.log (of the second test in the video above):



So, based on what I can see in the log, the addon uses obsolete Orbiter API functions (which just blows up the log for no reason) ...

(Downloaded from: https://www.orbiter-forum.com/resources/multiplayer-lite.5562/history (0.2))

Hello, thanks for the report. Does orbiter only crash with this plug in active active? would you kindly provide your orbiter log with the plugin inactive?

Also if you'd be so kind, can you try this on a fresh orbiter 2016 install? Although it uses some old functions the mfd still works and has been tested with orbiter 2016 and Open Orbiter.
 

EarthMoon

The Earth and the Moon
Joined
Jul 12, 2022
Messages
54
Reaction score
38
Points
18
Location
Germany
Preferred Pronouns
He, His, Him or You, Your, Yours
It does not crash when the addon is inactive. I have tried it on a fresh install (without modifying any setting or enabling/disabling any built-in things).

First try: plugin inactive. Everything works:

**** Orbiter.log
000000.000: Build Aug 28 2016 [v.160828]
000000.000: Timer precision: 1e-007 sec
000000.000: Found 0 joystick(s)
000000.000: Devices enumerated: 6
000000.000: Devices accepted: 5
000000.000: [ ] RGB Emulation (SW)
000000.000: [ ] Direct3D HAL (HW)
000000.000: [x] Direct3D T&L HAL (HW)
000000.000: [ ] Direct3D HAL (Intel(R) UHD Graphics 630) (HW)
000000.000: [x] Direct3D T&L HAL (Intel(R) UHD Graphics 630) (HW)
000000.000: Module AtlantisConfig.dll .... [Build 160828, API 160828]
000000.000: Module AtmConfig.dll ......... [Build 160828, API 160828]
000000.000: Module DGConfigurator.dll .... [Build 160828, API 160828]
000000.000:
000000.000: **** Creating simulation session
000000.000: DirectDraw interface OK
000000.000: Direct3D interface OK
000000.000: Graphics: Viewport: Window 1274 x 995 x 32
000000.000: Graphics: Hardware T&L capability: Yes
000000.000: Graphics: Z-buffer depth: 32 bit
000000.000: Graphics: Active lights supported: 8
000000.000: Loading 15382 records from star database
000000.000: ---------------------------------------------------------------
000000.000: >>> ERROR: DDraw error DDERR_BLTFASTCANTCLIP
000000.000: >>> [OrbiterGraphics::clbkBlt | .\OGraphics.cpp | 1633]
000000.000: ---------------------------------------------------------------
000000.000: Module Sun.dll ............... [Build 160828, API 160828]
VSOP87(E) Sun: Precision 1e-006, Terms 554/6634
000000.000: Module Mercury.dll ........... [Build 160828, API 160828]
VSOP87(B) Mercury: Precision 1e-005, Terms 167/7123
000000.000: Module Venus.dll ............. [Build 160828, API 160828]
000000.000: Module VenusAtm2006.dll ...... [Build 160828, API 160828]
VSOP87(B) Venus: Precision 1e-005, Terms 79/1710
000000.000: Module Earth.dll ............. [Build 160828, API 160828]
000000.000: Module EarthAtmJ71G.dll ...... [Build 160828, API 160828]
VSOP87(B) Earth: Precision 1e-008, Terms 2564/2564
000000.000: Module Moon.dll .............. [Build 160828, API 160828]
ELP82: Precision 1e-005, Terms 116/829
000000.000: Module Mars.dll .............. [Build 160828, API 160828]
000000.000: Module MarsAtm2006.dll ....... [Build 160828, API 160828]
VSOP87(B) Mars: Precision 1e-005, Terms 405/6400
000000.000: Module Phobos.dll ............ [Build ******, API 060425]
000000.000: Module Deimos.dll ............ [Build ******, API 060425]
000000.000: Module Galsat.dll ............ [Build 160828, API 160828]
000000.000: Module Jupiter.dll ........... [Build 160828, API 160828]
VSOP87(B) Jupiter: Precision 1e-006, Terms 1624/3625
000000.000: Module Io.dll ................ [Build 160828, API 160828]
000000.000: Module Europa.dll ............ [Build 160828, API 160828]
000000.000: Module Ganymede.dll .......... [Build 160828, API 160828]
000000.000: Module Callisto.dll .......... [Build 160828, API 160828]
000000.000: Module Satsat.dll ............ [Build 160828, API 160828]
000000.000: Module Saturn.dll ............ [Build 160828, API 160828]
VSOP87(B) Saturn: Precision 1e-006, Terms 2904/6365
000000.000: Module Mimas.dll ............. [Build 160828, API 160828]
SATSAT Mimas: Terms 113
000000.000: Module Enceladus.dll ......... [Build 160828, API 160828]
SATSAT Enceladus: Terms 33
000000.000: Module Tethys.dll ............ [Build 160828, API 160828]
SATSAT Tethys: Terms 101
000000.000: Module Dione.dll ............. [Build 160828, API 160828]
SATSAT Dione: Terms 59
000000.000: Module Rhea.dll .............. [Build 160828, API 160828]
SATSAT Rhea: Terms 68
000000.000: Module Titan.dll ............. [Build 160828, API 160828]
SATSAT Titan: Terms 100
000000.000: Module Iapetus.dll ........... [Build 160828, API 160828]
SATSAT Iapetus: Terms 605
000000.000: Module Uranus.dll ............ [Build 160828, API 160828]
VSOP87(B) Uranus: Precision 1e-006, Terms 1827/5269
000000.000: Module Miranda.dll ........... [Build ******, API 060425]
000000.000: Module Ariel.dll ............. [Build ******, API 060425]
000000.000: Module Umbriel.dll ........... [Build ******, API 060425]
000000.000: Module Titania.dll ........... [Build ******, API 060425]
000000.000: Module Oberon.dll ............ [Build ******, API 060425]
000000.000: Module Neptune.dll ........... [Build 160828, API 160828]
VSOP87(B) Neptune: Precision 1e-006, Terms 391/2024
000000.000: Finished initialising world
000000.000: Module DeltaGlider.dll ....... [Build 160828, API 160828]
000000.000: Module LuaInline.dll ......... [Build 160828, API 160828]
000000.000: Module ShuttleA.dll .......... [Build 160828, API 160828]
000000.000: Module ShuttlePB.dll ......... [Build 160828, API 160828]
000000.000: Finished initialising status
000000.000: Finished initialising camera
000000.000: Finished setting up render state
000000.000: Finished initialising panels
000021.016: **** Closing simulation session

Second try: plugin active. Crash to desktop:

**** Orbiter.log
000000.000: Build Aug 28 2016 [v.160828]
000000.000: Timer precision: 1e-007 sec
000000.000: Found 0 joystick(s)
000000.000: Devices enumerated: 6
000000.000: Devices accepted: 5
000000.000: [ ] RGB Emulation (SW)
000000.000: [ ] Direct3D HAL (HW)
000000.000: [x] Direct3D T&L HAL (HW)
000000.000: [ ] Direct3D HAL (Intel(R) UHD Graphics 630) (HW)
000000.000: [x] Direct3D T&L HAL (Intel(R) UHD Graphics 630) (HW)
000000.000: Module AtlantisConfig.dll .... [Build 160828, API 160828]
000000.000: Module AtmConfig.dll ......... [Build 160828, API 160828]
000000.000: Module DGConfigurator.dll .... [Build 160828, API 160828]
000000.000: Module multiplayer-lite.dll .. [Build 240316, API 160828]
000000.000: ---------------------------------------------------------------
000000.000: >>> WARNING: Obsolete API function used: oapiRegisterMFDMode
000000.000: At least one active module is accessing an obsolete interface function.
000000.000: Addons which rely on obsolete functions may not be compatible with
000000.000: future versions of Orbiter.
000000.000: ---------------------------------------------------------------
000000.000:
000000.000: **** Creating simulation session
000000.000: DirectDraw interface OK
000000.000: Direct3D interface OK
000000.000: Graphics: Viewport: Window 1274 x 995 x 32
000000.000: Graphics: Hardware T&L capability: Yes
000000.000: Graphics: Z-buffer depth: 32 bit
000000.000: Graphics: Active lights supported: 8
000000.000: Loading 15382 records from star database
000000.000: ---------------------------------------------------------------
000000.000: >>> ERROR: DDraw error DDERR_BLTFASTCANTCLIP
000000.000: >>> [OrbiterGraphics::clbkBlt | .\OGraphics.cpp | 1633]
000000.000: ---------------------------------------------------------------
000000.000: Module Sun.dll ............... [Build 160828, API 160828]
VSOP87(E) Sun: Precision 1e-006, Terms 554/6634
000000.000: Module Mercury.dll ........... [Build 160828, API 160828]
VSOP87(B) Mercury: Precision 1e-005, Terms 167/7123
000000.000: Module Venus.dll ............. [Build 160828, API 160828]
000000.000: Module VenusAtm2006.dll ...... [Build 160828, API 160828]
VSOP87(B) Venus: Precision 1e-005, Terms 79/1710
000000.000: Module Earth.dll ............. [Build 160828, API 160828]
000000.000: Module EarthAtmJ71G.dll ...... [Build 160828, API 160828]
VSOP87(B) Earth: Precision 1e-008, Terms 2564/2564
000000.000: Module Moon.dll .............. [Build 160828, API 160828]
ELP82: Precision 1e-005, Terms 116/829
000000.000: Module Mars.dll .............. [Build 160828, API 160828]
000000.000: Module MarsAtm2006.dll ....... [Build 160828, API 160828]
VSOP87(B) Mars: Precision 1e-005, Terms 405/6400
000000.000: Module Phobos.dll ............ [Build ******, API 060425]
000000.000: Module Deimos.dll ............ [Build ******, API 060425]
000000.000: Module Galsat.dll ............ [Build 160828, API 160828]
000000.000: Module Jupiter.dll ........... [Build 160828, API 160828]
VSOP87(B) Jupiter: Precision 1e-006, Terms 1624/3625
000000.000: Module Io.dll ................ [Build 160828, API 160828]
000000.000: Module Europa.dll ............ [Build 160828, API 160828]
000000.000: Module Ganymede.dll .......... [Build 160828, API 160828]
000000.000: Module Callisto.dll .......... [Build 160828, API 160828]
000000.000: Module Satsat.dll ............ [Build 160828, API 160828]
000000.000: Module Saturn.dll ............ [Build 160828, API 160828]
VSOP87(B) Saturn: Precision 1e-006, Terms 2904/6365
000000.000: Module Mimas.dll ............. [Build 160828, API 160828]
SATSAT Mimas: Terms 113
000000.000: Module Enceladus.dll ......... [Build 160828, API 160828]
SATSAT Enceladus: Terms 33
000000.000: Module Tethys.dll ............ [Build 160828, API 160828]
SATSAT Tethys: Terms 101
000000.000: Module Dione.dll ............. [Build 160828, API 160828]
SATSAT Dione: Terms 59
000000.000: Module Rhea.dll .............. [Build 160828, API 160828]
SATSAT Rhea: Terms 68
000000.000: Module Titan.dll ............. [Build 160828, API 160828]
SATSAT Titan: Terms 100
000000.000: Module Iapetus.dll ........... [Build 160828, API 160828]
SATSAT Iapetus: Terms 605
000000.000: Module Uranus.dll ............ [Build 160828, API 160828]
VSOP87(B) Uranus: Precision 1e-006, Terms 1827/5269
000000.000: Module Miranda.dll ........... [Build ******, API 060425]
000000.000: Module Ariel.dll ............. [Build ******, API 060425]
000000.000: Module Umbriel.dll ........... [Build ******, API 060425]
000000.000: Module Titania.dll ........... [Build ******, API 060425]
000000.000: Module Oberon.dll ............ [Build ******, API 060425]
000000.000: Module Neptune.dll ........... [Build 160828, API 160828]
VSOP87(B) Neptune: Precision 1e-006, Terms 391/2024
000000.000: Finished initialising world
000000.000: Module DeltaGlider.dll ....... [Build 160828, API 160828]
000000.000: Module LuaInline.dll ......... [Build 160828, API 160828]
000000.000: Module ShuttleA.dll .......... [Build 160828, API 160828]
000000.000: Module ShuttlePB.dll ......... [Build 160828, API 160828]
000000.000: Finished initialising status
000000.000: Finished initialising camera
000000.000: Finished setting up render state
000000.000: Finished initialising panels

(Both logs show the logs of the fresh orbiter install.)

Orbiter 2016 has been downloaded from http://orbit.medphys.ucl.ac.uk/mirrors/orbiter_radio/base_mirror.html (.zip version, http download)

Both tests have been done in the same scenario (Delta-glider > DG-S ready for take-off)
 
Last edited:

nbcfrosty

Well-known member
Joined
Jun 16, 2023
Messages
187
Reaction score
218
Points
58
Location
US
It does not crash when the addon is inactive. I have tried it on a fresh install (without modifying any setting or enabling/disabling any built-in things).

First try: plugin inactive. Everything works:



Second try: plugin active. Crash to desktop:



(Both logs show the logs of the fresh orbiter install.)

Orbiter 2016 has been downloaded from http://orbit.medphys.ucl.ac.uk/mirrors/orbiter_radio/base_mirror.html (.zip version, http download)

Both tests have been done in the same scenario (Delta-glider > DG-S ready for take-off)

Are you using orbiter_ng.exe with the DX9 client or are you using orbiter.exe with stock DX7 client? I have not tested this plugin with the stock orbiter.exe, as I am unable to launch it (I guess my gfx card may be too new?). Can you try with the DX9 client?

Maybe you are missing VS2022 redistributable runtime components?

Here's my log using stock Orbiter 2016 with dx9 client:

Code:
**** Orbiter.log
000000.000: Build Aug 28 2016 [v.160828]
000000.000: Timer precision: 1e-007 sec
000000.000: Found 0 joystick(s)
000000.000: Module AtlantisConfig.dll .... [Build 160828, API 160828]
000000.000: Module AtmConfig.dll ......... [Build 160828, API 160828]
000000.000: Module DGConfigurator.dll .... [Build 160828, API 160828]
000000.000: ---------------------------------------------------------------
BaseDir    : C:\Users\jack\Downloads\Orbiter2016\
ConfigDir  : C:\Users\jack\Downloads\Orbiter2016\Config\
MeshDir    : C:\Users\jack\Downloads\Orbiter2016\Meshes\
TextureDir : C:\Users\jack\Downloads\Orbiter2016\Textures\
HightexDir : C:\Users\jack\Downloads\Orbiter2016\Textures2\
ScenarioDir: C:\Users\jack\Downloads\Orbiter2016\Scenarios\
000000.000: ---------------------------------------------------------------
D3D9 DLLs  : C:\WINDOWS\SYSTEM32\d3d9.dll [v 10.0.22621.2506]
           : C:\WINDOWS\SYSTEM32\d3dx9_43.dll [v 9.29.952.3111]
000000.000: ---------------------------------------------------------------
000000.000: Module D3D9Client.dll ........ [Build 211009, API 160828]
000000.000: Module multiplayer-lite.dll .. [Build 240316, API 160828]
000000.000: ---------------------------------------------------------------
000000.000: >>> WARNING: Obsolete API function used: oapiRegisterMFDMode
000000.000: At least one active module is accessing an obsolete interface function.
000000.000: Addons which rely on obsolete functions may not be compatible with
000000.000: future versions of Orbiter.
000000.000: ---------------------------------------------------------------
000000.000:
000000.000: **** Creating simulation session
000000.000: D3D9: [DirectX 9 Initialized]
D3D9: 3D-Adapter.............. : AMD Radeon RX 6600
D3D9: MaxTextureWidth......... : 16384
D3D9: MaxTextureHeight........ : 16384
D3D9: MaxTextureRepeat........ : 8192
D3D9: VolTexAddressCaps....... : 0x3F
D3D9: NumSimultaneousRTs...... : 4
D3D9: VertexDeclCaps.......... : 0x3FF
D3D9: MiscCaps................ : 0x3FCCF2
D3D9: XNA Math Support........ : Yes
D3D9: Vertex Texture.......... : Yes
D3D9: Separate AlphaBlend..... : Yes
D3D9: Shadow Mapping.......... : Yes
D3D9: D3DFMT_A16B16G16R16F.... : Yes
D3D9: D3DFMT_A32B32G32R32F.... : Yes
D3D9: D3DFMT_D32F_LOCKABLE.... : Yes
D3D9: D3DFMT_A2R10G10B10...... : Yes
D3D9: D3DFMT_L8............... : Yes
D3D9: D3DDTCAPS_DEC3N......... : Yes
D3D9: D3DDTCAPS_FLOAT16_2..... : Yes
D3D9: D3DDTCAPS_FLOAT16_4..... : Yes
D3D9: Runs under WINE......... : No
D3D9: D3D9Build Date.......... : 211009
D3D9: Available Texture Memory : 4075 MB
000000.000: D3D9: [3DDevice Initialized]
000000.000: D3D9: [Loading Constellations]
000000.000: D3D9: [D3D9Client Initialized]
000000.000: Module Sun.dll ............... [Build 160828, API 160828]
VSOP87(E) Sun: Precision 1e-006, Terms 554/6634
000000.000: Module Mercury.dll ........... [Build 160828, API 160828]
VSOP87(B) Mercury: Precision 1e-005, Terms 167/7123
000000.000: Module Venus.dll ............. [Build 160828, API 160828]
000000.000: Module VenusAtm2006.dll ...... [Build 160828, API 160828]
VSOP87(B) Venus: Precision 1e-005, Terms 79/1710
000000.000: Module Earth.dll ............. [Build 160828, API 160828]
000000.000: Module EarthAtmJ71G.dll ...... [Build 160828, API 160828]
VSOP87(B) Earth: Precision 1e-008, Terms 2564/2564
000000.000: Module Moon.dll .............. [Build 160828, API 160828]
ELP82: Precision 1e-005, Terms 116/829
000000.000: Module Mars.dll .............. [Build 160828, API 160828]
000000.000: Module MarsAtm2006.dll ....... [Build 160828, API 160828]
VSOP87(B) Mars: Precision 1e-005, Terms 405/6400
000000.000: Module Phobos.dll ............ [Build ******, API 060425]
000000.000: Module Deimos.dll ............ [Build ******, API 060425]
000000.000: Module Galsat.dll ............ [Build 160828, API 160828]
000000.000: Module Jupiter.dll ........... [Build 160828, API 160828]
VSOP87(B) Jupiter: Precision 1e-006, Terms 1624/3625
000000.000: Module Io.dll ................ [Build 160828, API 160828]
000000.000: Module Europa.dll ............ [Build 160828, API 160828]
000000.000: Module Ganymede.dll .......... [Build 160828, API 160828]
000000.000: Module Callisto.dll .......... [Build 160828, API 160828]
000000.000: Module Satsat.dll ............ [Build 160828, API 160828]
000000.000: Module Saturn.dll ............ [Build 160828, API 160828]
VSOP87(B) Saturn: Precision 1e-006, Terms 2904/6365
000000.000: Module Mimas.dll ............. [Build 160828, API 160828]
SATSAT Mimas: Terms 113
000000.000: Module Enceladus.dll ......... [Build 160828, API 160828]
SATSAT Enceladus: Terms 33
000000.000: Module Tethys.dll ............ [Build 160828, API 160828]
SATSAT Tethys: Terms 101
000000.000: Module Dione.dll ............. [Build 160828, API 160828]
SATSAT Dione: Terms 59
000000.000: Module Rhea.dll .............. [Build 160828, API 160828]
SATSAT Rhea: Terms 68
000000.000: Module Titan.dll ............. [Build 160828, API 160828]
SATSAT Titan: Terms 100
000000.000: Module Iapetus.dll ........... [Build 160828, API 160828]
SATSAT Iapetus: Terms 605
000000.000: Module Uranus.dll ............ [Build 160828, API 160828]
VSOP87(B) Uranus: Precision 1e-006, Terms 1827/5269
000000.000: Module Miranda.dll ........... [Build ******, API 060425]
000000.000: Module Ariel.dll ............. [Build ******, API 060425]
000000.000: Module Umbriel.dll ........... [Build ******, API 060425]
000000.000: Module Titania.dll ........... [Build ******, API 060425]
000000.000: Module Oberon.dll ............ [Build ******, API 060425]
000000.000: Module Neptune.dll ........... [Build 160828, API 160828]
VSOP87(B) Neptune: Precision 1e-006, Terms 391/2024
000000.000: Finished initialising world
000000.000: Module DeltaGlider.dll ....... [Build 160828, API 160828]
000000.000: Module LuaInline.dll ......... [Build 160828, API 160828]
000000.000: Module ShuttleA.dll .......... [Build 160828, API 160828]
000000.000: Module ShuttlePB.dll ......... [Build 160828, API 160828]
000000.000: Finished initialising status
000000.000: Finished initialising camera
000000.000: Finished setting up render state
000000.000: D3D9: [Scene Initialized]
000000.000: Finished initialising panels
D3D9: NewShader [DG\deltaglider_ns]=4
D3D9: NewShader [DG\deltaglider_ns]=4
D3D9: ERROR: SurfHandle=0x16762EA0, Never use Sketchpad::GetDC() hDC not available
000007.842: D3D9: [Session Closed. Scene deleted.]
000007.842: D3D9: [Destroy Render Window Called]
000007.842: **** Closing simulation session

Link to dx9 client:
 
Top