Hello Toad, thanks for the moral support
The lack of response was not entirely unforeseen as I realised UWP was a bit niche around here (it shouldn’t be imo as that is the route to the Microsoft Store after all) but as was pointed out to me by the guy writing a C# based VR engine (StereoKit), SharpDX is discontinued and no longer worked on so any issues we may encounter may well ultimately become, “That is just not fixable”?
This all makes me a bit sad as I’d hate to see Monogame die after the monumental effort it must have taken to get off the ground in the first place.
I had a look through your bug issue and have only this code comment to offer:
// Problems...setting this to true will cause runtime crash on Windows Store Release/Debug.
// It may also cause performance problems on Windows if not using dedicated GPU (set multisample count in PresentationParams event?
graphics.PreferMultiSampling = false;
In other words I’ve never used Multisampling options in Monogame because it (again) causes a crash in UWP. At least it did in MG3.7
As for PresentationInterval, that is simply referring to the VSync rate, the timing of the “electron gun” (as was) of the actual screen used for display:
0 = No VSync, draw our game to screen as often as possible. Usually with FixedTimeStep = false for max framerates. Tearing can occur in this mode (two or more different images on screen at once).
1 = Sync every VBlank, draw every time the “electron gun” goes back to start a new screen draw.
2 = Sync every second VBlank, draw every OTHER time the “electron gun” goes back to the start.
3 = Sync every third VBlank (No option in Monogame for this).
4 = Sync every fourth VBlank (No option in Monogame for this).
For example, VSync 4 might be desired if the user’s screen runs at 120Hz but you want your game to run at only 30FPS yet still maintain parity with VSync. IsFixedTimeStep = true can simulate this to a degree but without VSync = 4 you’d still be drawing more often than needed (nothing has updated) so it’s not optimal for performance and is not truly synced for that rock solid frame pacing.
Unity has a nice write up about it here: Unity - Scripting API: QualitySettings.vSyncCount
It’s also worth pointing out that Unity & UWP works just fine in this regard. Even their API for getting the current screen refresh rate works in UWP.
In the end I fear that alot of these graphical bugs and issues with Monogame will end up not being addressed/fixable due to SharpDX so we use it at our own peril, understanding the risks and compromises we make in terms of features or platforms we target. It’s not always easy though as the first instinct/assumption is that we’ve done something wrong ourselves and in some cases of course we have.