| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- return {
- tag = 'callbacks',
- summary = 'The main entry point.',
- description = [[
- This callback is the main entry point for a LÖVR program. It calls `lovr.load` and returns a
- function that will be called every frame.
- ]],
- arguments = {},
- returns = {
- {
- name = 'loop',
- type = 'function',
- arguments = {},
- returns = {
- {
- name = 'result',
- type = '*'
- }
- },
- description = 'The main loop function.'
- }
- },
- notes = [[
- The main loop function can return one of the following values:
- - Returning `nil` will keep the main loop running.
- - Returning the string 'restart' plus an optional value will restart LÖVR. The value can be
- accessed in the `restart` key of the `arg` global.
- - Returning a number will exit LÖVR using the number as the exit code (0 means success).
- Care should be taken when overriding this callback. For example, if the main loop does not call
- `lovr.system.pollEvents` then the OS will think LÖVR is unresponsive, or if the quit event is
- not handled then closing the window won't work.
- ]],
- example = {
- description = 'The default `lovr.run`:',
- code = [[
- function lovr.run()
- if lovr.timer then lovr.timer.step() end
- if lovr.load then lovr.load(arg) end
- return function()
- if lovr.system then lovr.system.pollEvents() end
- if lovr.event then
- for name, a, b, c, d in lovr.event.poll() do
- if name == 'restart' then
- local cookie = lovr.restart and lovr.restart()
- return 'restart', cookie
- elseif name == 'quit' and (not lovr.quit or not lovr.quit(a)) then
- return a or 0
- end
- if lovr.handlers[name] then lovr.handlers[name](a, b, c, d) end
- end
- end
- local dt = 0
- if lovr.timer then dt = lovr.timer.step() end
- if lovr.headset then dt = lovr.headset.update() end
- if lovr.update then lovr.update(dt) end
- if lovr.graphics then
- local headset = lovr.headset and lovr.headset.getPass()
- if headset and (not lovr.draw or lovr.draw(headset)) then headset = nil end
- local window = lovr.graphics.getWindowPass()
- if window and (not lovr.mirror or lovr.mirror(window)) then window = nil end
- lovr.graphics.submit(headset, window)
- lovr.graphics.present()
- end
- if lovr.headset then lovr.headset.submit() end
- if lovr.math then lovr.math.drain() end
- end
- end
- ]],
- },
- related = {
- 'lovr.load',
- 'lovr.quit'
- }
- }
|