mirror of
https://github.com/bryanthaboi/gen1recomp.git
synced 2026-08-28 09:54:43 +02:00
CLOSES #941, CLOSES #1081, CLOSES #1349, CLOSES #1602, CLOSES #1618, CLOSES #1624, CLOSES #1630, CLOSES #1633, CLOSES #1661, CLOSES #1669, CLOSES #1676, CLOSES #1731, CLOSES #1739, CLOSES #1740, CLOSES #1742, CLOSES #1744, CLOSES #1753, CLOSES #1757, CLOSES #1758, CLOSES #1760, CLOSES #1761, CLOSES #1762, CLOSES #1763, CLOSES #1765, CLOSES #1770, CLOSES #1777, CLOSES #1781, CLOSES #1783, CLOSES #1784, CLOSES #1785, CLOSES #1787, CLOSES #1788, CLOSES #1789, CLOSES #1790, CLOSES #1792, CLOSES #1797, CLOSES #1803
This commit is contained in:
@@ -1170,6 +1170,17 @@ function love.run()
|
||||
-- per-frame sleep-granularity jitter.
|
||||
local nextFrame = love.timer and love.timer.getTime() or 0
|
||||
local dt = 0
|
||||
local idleFor = 0
|
||||
local SLEEP_FLOOR = 0.001
|
||||
local WAKE = {
|
||||
keypressed = true, keyreleased = true, textinput = true,
|
||||
mousepressed = true, mousereleased = true, mousemoved = true,
|
||||
wheelmoved = true, touchpressed = true, touchreleased = true,
|
||||
touchmoved = true, joystickpressed = true, joystickreleased = true,
|
||||
joystickhat = true, gamepadpressed = true, gamepadreleased = true,
|
||||
joystickadded = true, joystickremoved = true, filedropped = true,
|
||||
directorydropped = true, focus = true, visible = true, resize = true,
|
||||
}
|
||||
|
||||
return function()
|
||||
-- process events
|
||||
@@ -1188,17 +1199,34 @@ function love.run()
|
||||
return a or 0
|
||||
end
|
||||
end
|
||||
if WAKE[name] then
|
||||
idleFor = 0
|
||||
elseif name == "joystickaxis" and type(c) == "number" and math.abs(c) > 0.5 then
|
||||
idleFor = 0
|
||||
end
|
||||
love.handlers[name](a, b, c, d, e, f)
|
||||
end
|
||||
end
|
||||
|
||||
-- update dt
|
||||
if love.timer then dt = love.timer.step() end
|
||||
idleFor = idleFor + dt
|
||||
|
||||
-- call update and draw
|
||||
if love.update then love.update(dt) end
|
||||
|
||||
if love.graphics and love.graphics.isActive() then
|
||||
local visible = not (love.window and love.window.isVisible)
|
||||
or love.window.isVisible()
|
||||
local focused = not (love.window and love.window.hasFocus)
|
||||
or love.window.hasFocus()
|
||||
local cap = FrameCap.current
|
||||
if not visible then
|
||||
cap = 10
|
||||
elseif Importer and (not focused or idleFor > 30) then
|
||||
cap = 15
|
||||
end
|
||||
|
||||
if visible and love.graphics and love.graphics.isActive() then
|
||||
love.graphics.origin()
|
||||
love.graphics.clear(love.graphics.getBackgroundColor())
|
||||
if love.draw then love.draw() end
|
||||
@@ -1209,9 +1237,9 @@ function love.run()
|
||||
if paced then
|
||||
-- Sleep out the remainder of the frame budget, measured from the
|
||||
-- carried deadline, in small chunks so the OS timer stays
|
||||
-- responsive. vsync is untouched: when it already paces slower
|
||||
-- than the cap the remainder is <= 0 and this rounds to a no-op.
|
||||
local budget = 1 / FrameCap.current
|
||||
-- responsive. The pacer yields to vsync inside a 1ms dead band, so
|
||||
-- when the panel already paces at or below the cap it is a no-op.
|
||||
local budget = 1 / cap
|
||||
nextFrame = nextFrame + budget
|
||||
local now = love.timer.getTime()
|
||||
-- A stall (alt-tab, a GC pause, a blocked import) can leave the
|
||||
@@ -1222,8 +1250,8 @@ function love.run()
|
||||
end
|
||||
while true do
|
||||
local remaining = nextFrame - love.timer.getTime()
|
||||
if remaining <= 0 then break end
|
||||
love.timer.sleep(remaining < 0.001 and remaining or 0.001)
|
||||
if remaining <= SLEEP_FLOOR then break end
|
||||
love.timer.sleep(0.001)
|
||||
end
|
||||
else
|
||||
love.timer.sleep(0.001)
|
||||
|
||||
Reference in New Issue
Block a user