luv

Workshop wiki

lobby.lisp

luft/render/lobby.lisp

system luft/render · 15 definitions · on GitHub

in-package#:luft.render

luft contributes only application placement and lifecycle. The radio and retained HUD remain shared components, while the central viewer-instrument dispatcher owns frame, input, and release ordering.

defclassviewer-lobby-instrument
client:initarg:client:readerviewer-lobby-client
frame:initarg:frame:initformnil:accessorviewer-lobby-frame
compositor:initarg:compositor:initformnil:accessorviewer-lobby-compositor
defmethodviewer-instrument-priority
declare
ignoreinstrument
10
defmethodviewer-instrument-present-p
declare
ignoreviewer

A radio-only attachment must not make the renderer open an otherwise empty overlay pass. The worker remains alive independently of paint.

not
null
viewer-lobby-frameinstrument
defmethodrefresh-viewer-instrument
declare
ignoreviewer
when
viewer-lobby-frameinstrument
luv.lobby.mcclim:refresh-lobby-hud
viewer-lobby-frameinstrument
instrument
defmethodencode-viewer-instrument
viewerpasssurface-texturephysical-extent
declare
ignorephysical-extent
when
viewer-lobby-frameinstrument
mcluv:encode-direct-gpu-mirror
viewer-lobby-compositorinstrument
passsurface-texture
instrument
defmethodrelease-viewer-instrument
declare
ignoreviewer
let
errorsnil

GPU ownership ends first while viewer's device is still live. Network shutdown is independent and bounded, and still runs if frame release reports a problem.

handler-case
when
viewer-lobby-frameinstrument
luv.lobby.mcclim:destroy-lobby-hud
viewer-lobby-frameinstrument
setf
viewer-lobby-frameinstrument
nil
viewer-lobby-compositorinstrument
nil
error
condition
push
cons:hudcondition
errors
handler-case
luv.lobby:stop-lobby-client
viewer-lobby-clientinstrument
error
condition
push
cons:radiocondition
errors
whenerrors
error"LUFT lobby release failed in ~{~A~^, ~}: ~A"
mapcar#'car
reverseerrors
cdarerrors
nil
defun%attach-viewer-lobby
or
let
clientnil
instrumentnil
transferred-pnil
completed-pnil
unwind-protect
progn

START only spawns the worker; broker discovery, connect, subscribe, and reads all remain on that worker.

setfinstrument
make-instance'viewer-lobby-instrument:clientclient
setftransferred-pt
setfcompleted-pt
instrument
unlesscompleted-p
when
andinstrument
memberinstrument:test#'eq
ignore-errors
when
andclient
nottransferred-p
ignore-errors
defun%open-viewer-lobby
let
unless
viewer-lobby-frameinstrument
let
completed-pnil
unwind-protect
progn
setfframe
luv.lobby.mcclim:make-embedded-lobby-hud
viewer-lobby-clientinstrument
viewer-canvasviewer
viewer-contextviewer
viewer-deviceviewer
:title"LUFT lobby"
setf
viewer-lobby-frameinstrument
frame
viewer-lobby-compositorinstrument
luv.lobby.mcclim:lobby-hud-compositorframe
completed-pt
unlesscompleted-p
when
eqframe
viewer-lobby-frameinstrument
setf
viewer-lobby-frameinstrument
nil
viewer-lobby-compositorinstrument
nil
instrument
defun%close-viewer-lobby
alexandria:when-let
when
viewer-lobby-frameinstrument
luv.lobby.mcclim:destroy-lobby-hud
viewer-lobby-frameinstrument
setf
viewer-lobby-frameinstrument
nil
viewer-lobby-compositorinstrument
nil
nil
defunattach-viewer-lobby

Start viewer's shared radio once at a frame boundary, without its panel.

luv:request-canvas-frame
viewer-canvasviewer
lambda
timestamp
declare
ignoretimestamp
defunopen-viewer-lobby

Open the detailed panel at a frame boundary over the already-live radio.

luv:request-canvas-frame
viewer-canvasviewer
lambda
timestamp
declare
ignoretimestamp
defunclose-viewer-lobby

Hide the detailed panel at a frame boundary, preserving its radio client.

luv:request-canvas-frame
viewer-canvasviewer
lambda
timestamp
declare
ignoretimestamp
defuntoggle-viewer-lobby

Toggle the detailed panel atomically at viewer's next frame boundary.

luv:request-canvas-frame
viewer-canvasviewer
lambda
timestamp
declare
ignoretimestamp
t
clim:define-command
com-toggle-lobby-panel:command-tableluft-atelier:name"Toggle Lobby Panel"