luv

Workshop wiki

metabar.lisp

luft/render/metabar.lisp

system luft/render · 65 definitions · on GitHub

luft adapter for the shared retained-GPU metabar instrument.

in-package#:luft.render

--------------------------------------------------------------------- The viewer's existing authored settings as an open metabar vocabulary.

defmethodmcluv:metabar-groups-for
declare
ignoreviewer
'
:geometry:navigation
defmethodmcluv:metabar-controls-for
group
eql:geometry
declare
ignoreviewergroup
'
:bevel-width:construction-lines
defmethodmcluv:metabar-controls-for
group
eql:navigation
declare
ignoreviewergroup
'
:movement-speed:mouse-sensitivity
defmethodmcluv:metabar-actions-for
declare
ignoreviewer
'
:reset-view:quit
defmethodmcluv:metabar-control-kind
control
eql:bevel-width
declare
ignorecontrolviewer
:scalar
defmethodmcluv:metabar-control-kind
control
eql:construction-lines
declare
ignorecontrolviewer
:switch
defmethodmcluv:metabar-control-kind
control
eql:movement-speed
declare
ignorecontrolviewer
:scalar
defmethodmcluv:metabar-control-kind
control
eql:mouse-sensitivity
declare
ignorecontrolviewer
:scalar
defmethodmcluv:metabar-control-label
control
eql:bevel-width
declare
ignorecontrolviewer

bevel width

defmethodmcluv:metabar-control-label
control
eql:construction-lines
declare
ignorecontrolviewer

construction lines

defmethodmcluv:metabar-control-label
control
eql:movement-speed
declare
ignorecontrolviewer

movement speed

defmethodmcluv:metabar-control-label
control
eql:mouse-sensitivity
declare
ignorecontrolviewer

mouse sensitivity

defunviewer-metabar-movement-speed
if
viewer-playerviewer
walking-player-speed
viewer-playerviewer
viewer-speedviewer
defmethodmcluv:metabar-control-value
control
eql:bevel-width
declare
ignorecontrol
viewer-bevel-widthviewer
defmethodmcluv:metabar-control-value
control
eql:construction-lines
declare
ignorecontrolviewer
defmethodmcluv:metabar-control-value
control
eql:movement-speed
declare
ignorecontrol
defmethodmcluv:metabar-control-value
control
eql:mouse-sensitivity
declare
ignorecontrol
viewer-sensitivityviewer
defmethodmcluv:metabar-control-value-label
control
eql:bevel-width
value
declare
ignorecontrolviewer
defmethodmcluv:metabar-control-value-label
control
eql:construction-lines
value
declare
ignorecontrolviewer
ifvalue"on""off"
defmethodmcluv:metabar-control-value-label
control
eql:movement-speed
value
declare
ignorecontrolviewer
formatnil"~,1F cells/s"value
defmethodmcluv:metabar-control-value-label
control
eql:mouse-sensitivity
value
declare
ignorecontrolviewer
formatnil"~,4F rad/px"value
defmethodmcluv:metabar-control-fraction
control
eql:construction-lines
value
declare
ignorecontrolviewer
ifvalue1.00.0
defmethodmcluv:metabar-control-change-kind
control
eql:bevel-width
declare
ignorecontrolviewer
:rebuild
defmethodmcluv:metabar-control-update-policy
control
eql:bevel-width
declare
ignorecontrolviewer
:commit-on-release
defunset-viewer-construction-lines
viewerenabled-p
setf*wireframe*
ifenabled-p1.00.0
when
viewer-rendererviewer
setf
renderer-history-valid-p
viewer-rendererviewer
nil
enabled-p
defunset-viewer-metabar-bevel-width
viewerbevel-width
unless
and
=bevel-width
viewer-bevel-widthviewer
null
viewer-bevel-profileviewer

This remains the viewer renderer's own coherent replacement boundary. The metabar only schedules it there and never remeshes in pointer input.

refresh-viewer-rendererviewer:solid
viewer-sourceviewer
:bevel-widthbevel-width:bevel-profilenil
bevel-width
defunset-viewer-metabar-movement-speed
viewervalue
let*
setf
viewer-speedviewer
quantized
when
viewer-playerviewer
setf
walking-player-speed
viewer-playerviewer
quantized
quantized
defmethodmcluv:perform-metabar-control-step
control
eql:bevel-width
directionmultiplier
declare
ignorecontrol
let*
index
or
position
viewer-bevel-widthviewer
widths
0
target
arefwidths
mod
+index
*directionmultiplier
lengthwidths
defmethodmcluv:perform-metabar-control-step
control
eql:construction-lines
directionmultiplier
declare
ignorecontrolmultiplier
defmethodmcluv:perform-metabar-control-step
control
eql:mouse-sensitivity
directionmultiplier
declare
ignorecontrol
defmethodmcluv:perform-metabar-control-set-fraction
control
eql:bevel-width
fraction
declare
ignorecontrol
let*
index
round
*fraction
1-
lengthwidths
defmethodmcluv:metabar-action-label
action
eql:reset-view
declare

reset view

--------------------------------------------------------------------- Viewer instrument attachment.

defclassviewer-metabar-instrument
frame:initarg:frame:readerviewer-metabar-frame
compositor:initarg:compositor:readerviewer-metabar-compositor
slide:initform0d0:accessorviewer-metabar-slide
open-p:initformt:accessorviewer-metabar-open-p
last-time:initform
/
get-internal-real-time
coerceinternal-time-units-per-second'double-float
:accessorviewer-metabar-last-time
defmethodviewer-instrument-priority
declare
ignoreinstrument
500
defmethodviewer-instrument-present-p
declare
ignoreinstrumentviewer

The dispatcher refreshes only present attachments. Keep a fully closed drawer present for its final refresh, which detaches and releases it; encode and event methods below remain no-ops while it is closed.

t
defmethodrefresh-viewer-instrument
let
frame
viewer-metabar-frameinstrument

McCLIM authors and publishes the retained semantic revision outside the game's render pass. encode below is replay-only.

let*
now
/
get-internal-real-time
coerceinternal-time-units-per-second'double-float
last
viewer-metabar-last-timeinstrument
seconds
min0.1d0
max0d0
-nowlast
target
if
viewer-metabar-open-pinstrument
1d00d0
slide
viewer-metabar-slideinstrument
step
*6d0seconds
setf
viewer-metabar-last-timeinstrument
now
viewer-metabar-slideinstrument
cond
>targetslide
mintarget
+slidestep
<targetslide
maxtarget
-slidestep
tslide
when
and
not
viewer-metabar-open-pinstrument
zerop
viewer-metabar-slideinstrument
instrument
defmethodencode-viewer-instrument
viewerpasssurface-texturephysical-extent
declare
ignorephysical-extent
when
plusp
viewer-metabar-slideinstrument
let
frame
viewer-metabar-frameinstrument
mcluv:encode-direct-gpu-mirror
viewer-metabar-compositorinstrument
passsurface-texture
instrument
defmethodrelease-viewer-instrument
declare
ignoreviewer
mcluv:destroy-metabar
viewer-metabar-frameinstrument
defunclose-viewer-metabar

Begin sliding viewer's metabar away, if present.

alexandria:when-let
setf
viewer-metabar-open-pinstrument
nil
nil
defunopen-viewer-metabar
viewer&key
title"LUFT metabar"

Attach viewer's shared metabar and release relative pointer capture.

alexandria:if-let
progn

Lisp development may have extended the open CLOS vocabulary while this drawer was sliding out. Reopening is its publication boundary.

mcluv:refresh-metabar-vocabulary
viewer-metabar-frameinstrument
setf
viewer-metabar-open-pinstrument
t
instrument
let
transferred-pnil
completed-pnil
unwind-protect
progn
when
viewer-pointer-captured-pviewer
setf
viewer-pointer-captured-pviewer
nil
setfframe
mcluv:make-embedded-metabarviewer
viewer-canvasviewer
viewer-contextviewer
viewer-deviceviewer
:titletitle
let*
compositor
make-instance'mcluv:direct-gpu-mirror-compositor:mirrormirror
instrument
make-instance'viewer-metabar-instrument:frameframe:compositorcompositor
setf
mcluv:mirror-compositormirror
compositor
setftransferred-pt
setfcompleted-pt
instrument
unlesscompleted-p
clim:define-command
com-toggle-metabar:command-tableluft-atelier:name"Toggle Metabar":keystroke
:return
defmethodhandle-viewer-instrument-event
declare
ignorecanvas
when
viewer-metabar-open-pinstrument
when
eq:dismiss
mcluv:handle-metabar-key-event
viewer-metabar-frameinstrument
event
t
defmethodhandle-viewer-instrument-event
declare
ignoreviewercanvasevent
and
viewer-metabar-open-pinstrument
t
defmethodhandle-viewer-instrument-event
declare
ignorecanvas
when
viewer-metabar-open-pinstrument
let
frame
viewer-metabar-frameinstrument
when
setf
viewer-pointer-xviewer
canvas-pointer-event-xevent
viewer-pointer-yviewer
canvas-pointer-event-yevent

Modal while open: an outside click dismisses without throwing a ball or recapturing relative pointer mode in the same event.

t