Stuttering in windowed mode with vsync turned on

Questions about the LÖVE API, installing LÖVE and other support related questions go here.
Forum rules
Before you make a thread asking for help, read this.
Shaloog
Prole
Posts: 8
Joined: Tue Aug 24, 2021 6:50 pm

Stuttering in windowed mode with vsync turned on

Post by Shaloog »

Hello, I made a little test game and when I run it in windowed mode (fullscreen = false) with vsync turned on, there is very noticeable stuttering. There is no drop in fps and it's running at a constant 60 fps but there is some issue with the rendering which makes the movement look jerky. This issue completely goes away in fullscreen mode or with vsync turned off. Also, the behaviour isn't consistent. Sometimes it's mild and sometimes it's very hard.

I've attached two files to show you the behaviour. rough.love has the stuttering whereas smooth.love runs fine and the only difference is that vsync is turned off in smooth.love. Press w/a/s/d to move the box and if you don't see any stuttering in rough.love, please close the window and try again because like I said, it doesn't happen consistently. I tried it on my friend's PC and the same thing is happening there too.

Any idea what might be causing this and how I can fix it?
Attachments
smooth.love
(13.12 KiB) Downloaded 178 times
rough.love
(13.4 KiB) Downloaded 178 times
User avatar
pgimeno
Party member
Posts: 3672
Joined: Sun Oct 18, 2015 2:58 pm

Re: Stuttering in windowed mode with vsync turned on

Post by pgimeno »

I can't see any stuttering (Linux, nVidia GeForce 210, driver version 340.107).

From the line endings I can tell you're using Windows. Could it be your graphics driver? Antivirus? The OS? Also maybe you have some desktop effects enabled and the graphics card is trying to render them, and that slows down the graphics driver occasionally.

I see you load resources with a coroutine which has a time limit of 1/50; that's more than the time of one frame. Could it be that resources are still processed?

There are many possibilities, most likely including some that didn't occur to me, and I can't help narrowing them down because I can't reproduce the issue.

You can see if the delay is visible in the program by checking dt against a threshold. For example:

Code: Select all

function love.update(dt)
  if dt > 1/40 then print("Stutter") end
  ...
User avatar
ReFreezed
Party member
Posts: 612
Joined: Sun Oct 25, 2015 11:32 pm
Location: Sweden
Contact:

Re: Stuttering in windowed mode with vsync turned on

Post by ReFreezed »

rough.love is stuttering for me too (Windows 7) while smooth.love is indeed smooth. The stuttering seems to go away after a while, but it's kinda inconsistent as you say. I don't know if this is the actual issue, but commenting out the love.window.setTitle() call seem to solve, or at least decrease, the stuttering for me for whatever reason. Printing out dt reveals that the frame rate don't change with the mentioned change, but somehow the visible stuttering is different.

(I've encountered weird stuttering myself a few of times over the years I've used the different versions of LÖVE, but never really found out why.)
Tools: Hot Particles, LuaPreprocess, InputField, (more) Games: Momento Temporis
"If each mistake being made is a new one, then progress is being made."
User avatar
GVovkiv
Party member
Posts: 686
Joined: Fri Jan 15, 2021 7:29 am

Re: Stuttering in windowed mode with vsync turned on

Post by GVovkiv »

Well, for me, all 2 examples stuttering
As for Windows 10, RX570
User avatar
4aiman
Party member
Posts: 262
Joined: Sat Jan 16, 2016 10:30 am

Re: Stuttering in windowed mode with vsync turned on

Post by 4aiman »

Both stutter for me.
The project seems to be extremely sensitive to any other GPU/CPU load.
1st of all, from love2d wiki:

Code: Select all

Constantly updating the window title can lead to issues on some systems and therefore is discouraged. 
But even without that the framerate is inconsistent.
I moved the box out of the screen area, and the "dt" fluctuates between 0.00168 and 0.05218. If I dare to move a window, max dt can go up to half a second.

Not sure is that's the reason, but you might want to look into this https://stackoverflow.com/questions/184 ... g-it-wrong
Shaloog
Prole
Posts: 8
Joined: Tue Aug 24, 2021 6:50 pm

Re: Stuttering in windowed mode with vsync turned on

Post by Shaloog »

pgimeno wrote: Mon Aug 30, 2021 11:52 am I can't see any stuttering (Linux, nVidia GeForce 210, driver version 340.107).

From the line endings I can tell you're using Windows. Could it be your graphics driver? Antivirus? The OS? Also maybe you have some desktop effects enabled and the graphics card is trying to render them, and that slows down the graphics driver occasionally.

I see you load resources with a coroutine which has a time limit of 1/50; that's more than the time of one frame. Could it be that resources are still processed?

There are many possibilities, most likely including some that didn't occur to me, and I can't help narrowing them down because I can't reproduce the issue.

You can see if the delay is visible in the program by checking dt against a threshold. For example:

Code: Select all

function love.update(dt)
  if dt > 1/40 then print("Stutter") end
  ...
It's happening on other people's PCs too so I don't know if it has anything to do with my drivers, OS, etc.

It goes to the "play state" only after all resources are loaded and also in that test project there are no resources to be loaded so that's not the problem either.

There is actually no drop in fps at all and the dt is consistent but somehow visually it stutters.

I even created a new empty project with just a single main.lua file which does nothing but move a rectangle when you hold a button and it's still stuttering the same way. It's really weird.
Shaloog
Prole
Posts: 8
Joined: Tue Aug 24, 2021 6:50 pm

Re: Stuttering in windowed mode with vsync turned on

Post by Shaloog »

ReFreezed wrote: Mon Aug 30, 2021 1:09 pm rough.love is stuttering for me too (Windows 7) while smooth.love is indeed smooth. The stuttering seems to go away after a while, but it's kinda inconsistent as you say. I don't know if this is the actual issue, but commenting out the love.window.setTitle() call seem to solve, or at least decrease, the stuttering for me for whatever reason. Printing out dt reveals that the frame rate don't change with the mentioned change, but somehow the visible stuttering is different.

(I've encountered weird stuttering myself a few of times over the years I've used the different versions of LÖVE, but never really found out why.)
Yes the framerate is stable but somehow there is visual stuttering. It's like the rectangle is getting distorted for a split-second while being rendered.
Shaloog
Prole
Posts: 8
Joined: Tue Aug 24, 2021 6:50 pm

Re: Stuttering in windowed mode with vsync turned on

Post by Shaloog »

I created a new empty project from scratch which has just one main.lua file with the code you see below and one small image and it's still stuttering. So the problem is obviously not with the code and this issue is happening on other people's systems too so I don't think it's because of anything wrong with my PC environment in particular. What could be causing this?

Code: Select all

function love.load()
    love.window.setMode(1280, 720, {
        fullscreen = false,
        vsync = 1
    })

    img = love.graphics.newImage('image.png')

    x, y = 80, 80
    speed = 400
end

function love.update(dt)
    if love.keyboard.isDown('s') then
        y = y + speed * dt
    elseif love.keyboard.isDown('d') then
        x = x + speed * dt
    elseif love.keyboard.isDown('w') then
        y = y - speed * dt
    elseif love.keyboard.isDown('a') then
        x = x - speed * dt
    end
end

function love.draw()
    love.graphics.draw(
        img,
        math.floor(x),
        math.floor(y),
        0,
        2
    )
end
Attachments
wtf.love
(738 Bytes) Downloaded 172 times
grump
Party member
Posts: 947
Joined: Sat Jul 22, 2017 7:43 pm

Re: Stuttering in windowed mode with vsync turned on

Post by grump »

Shaloog wrote: Mon Aug 30, 2021 5:00 pm Yes the framerate is stable but somehow there is visual stuttering. It's like the rectangle is getting distorted for a split-second while being rendered.
Measuring performance in FPS is often misleading. In LÖVE the reported FPS is the average over the last second or so. You won't see single-frame spikes in averaged numbers.

Use dt in love.update instead. Displaying min/max/avg dt besides FPS is good practice imo.
What could be causing this?
One possible explanation is background tasks periodically taking up CPU time. Maybe Antivirus or that other crap running on Windows PCs.
Shaloog
Prole
Posts: 8
Joined: Tue Aug 24, 2021 6:50 pm

Re: Stuttering in windowed mode with vsync turned on

Post by Shaloog »

So in case anyone is interested, I was able to fix the problem. You can find the solution here.
Post Reply

Who is online

Users browsing this forum: Ahrefs [Bot] and 11 guests