Positionally constant screen tearing

Windows 7 x86
MG 3.7.1 opengl
Intel graphics hd
Dual full hd monitor setup (60 hz)

I have a game running at approximately 50 fps with visible signs of variable screen tearing. I tried to apply Vsync to eliminate the tearing.

Graphics.SynchronizeWithVerticalRetrace = true

This didn’t seem to have any effect, so I tried to set the Present Interval to 2 since the frame rate couldn’t reach the monitor’s refresh rate.

Graphics.GraphicsDevice.PresentationParameters.PresentationInterval = PresentInterval.Two;

This had an interesting result. The game presented a constant 30fps as expected, and the screen tearing continued to happen, however, it was ALWAYS happening approximately in the same horizontal line, only a few cm from the top of the top screen. (during many tests it was always in the same spot)

This makes me believe that the game’s frame rate was synchronized with the monitors’ refresh rate since the tearing was always in the same spot. The problem is that, for some reason, the front/back buffers are being swapped briefly after the screen starts updating the frame with the front buffer data.

Does anyone have some helpful insight into why this happens and how to fix it?

Important note: for irrelevant reasons, I can’t install any external software or firmware in this system, so I need to solve this problem without updating the GPU drivers, and preferably with this same version of monogame (last case solution)

Since I couldn’t find a solution yet, and I read that some old intel drivers had problems using Vsync with OpenGL I tried porting the game to DirectX, however, I encountered some uncorrelated problems described here:

Hey, so I’ve been having the same issue for a while and I found the solution: It is not MonoGame’s fault (surprising right?), the actual reason you might be getting screen tears is because your integrated graphics settings are configured with disabled Vsync. I use a laptop (runs Ubuntu) with both integrated graphics and a dedicated gpu, my problem was solved when I told my system to use my nvidia gpu (which has VSync turned on in Nvidia X Server Settings by default) all the time, instead of only for performance critical applications because I guess my game did not count as one. Right now I am doing more research on how to tell my system to use gpu for my game if available since that gives MUCH better performance and also usually solves graphics quality related issues like Vsync

That being said you should be fine as is because vsync will likely work on other machines

Enable vsync:

Force nVidia GPU: