luv

Workshop wiki

package.lisp

hal/package.lisp

system luv · 2 definitions · on GitHub

eval-when
:compile-toplevel:load-toplevel:execute

Unlike an ordinary declarative package, luv.VK's external vocabulary is populated by defvkfun as backend files load. Reasserting an empty DEFPACKAGE in a durable image makes SBCL report every legitimate entry point as package variance, which turns an otherwise valid ASDF recompile into COMPILE-FILE-ERROR. Establish this dynamic namespace exactly once.

unless
find-package'#:luv.vk
defpackage#:luv.vk
:nicknames#:vk
:use
:documentation

The Vulkan entry points luv speaks, one external function per foreign entry point. defvkfun interns and exports here; nothing else does.

defpackage#:luv.vulkan
:nicknames#:lvk
:use#:cl
:export#:+portability-enumeration-extension-name+#:+swapchain-extension-name+#:+surface-capabilities-2-extension-name+#:+present-timing-extension-name+#:+present-id-2-extension-name+#:+debug-utils-extension-name+#:+mesh-shader-extension-name+#:vulkan-call-error#:vulkan-call-error-operation#:vulkan-call-error-result#:vulkan-call-event#:vulkan-call-event-sequence#:vulkan-call-event-timestamp#:vulkan-call-event-duration#:vulkan-call-event-thread#:vulkan-call-event-name#:vulkan-call-event-foreign-name#:vulkan-call-event-arguments#:vulkan-call-event-values#:vulkan-call-event-status#:vulkan-call-event-condition#:vulkan-trace#:vulkan-trace-events#:start-vulkan-trace#:stop-vulkan-trace#:current-vulkan-trace#:with-vulkan-trace#:vulkan-trace-presentation-intervals#:vulkan-function-description#:make-version#:enumerate-instance-extension-names#:enumerate-device-extension-names#:create-instance#:destroy-instance#:debug-message#:debug-message-severity#:debug-message-types#:debug-message-id-name#:debug-message-id-number#:debug-message-text#:debug-messenger#:debug-messenger-destroyed-p#:install-debug-messenger#:destroy-debug-messenger#:enumerate-physical-devices#:queue-family#:queue-family-flags#:queue-family-count#:physical-device-queue-families#:physical-device-shader-int64-p#:physical-device-mesh-shader-p#:physical-device-presentation-features#:physical-memory-type#:physical-memory-type-flags#:physical-memory-type-heap-index#:physical-device-memory-types#:create-device#:destroy-device#:get-device-queue#:device-wait-idle#:create-image#:destroy-image#:image-memory-requirements#:image-memory-requirements-size#:image-memory-requirements-alignment#:image-memory-requirements-memory-type-bits#:get-image-memory-requirements#:create-buffer#:destroy-buffer#:buffer-memory-requirements#:buffer-memory-requirements-size#:buffer-memory-requirements-alignment#:buffer-memory-requirements-memory-type-bits#:get-buffer-memory-requirements#:allocate-memory#:free-memory#:bind-image-memory#:bind-buffer-memory#:map-memory#:unmap-memory#:create-image-view#:destroy-image-view#:create-shader-module#:destroy-shader-module#:create-storage-image-descriptor-set-layout#:create-uniform-buffer-descriptor-set-layout#:create-texture-sampler-uniform-descriptor-set-layout#:destroy-descriptor-set-layout#:create-pipeline-layout#:destroy-pipeline-layout#:create-compute-pipeline#:create-graphics-pipeline#:create-mesh-graphics-pipeline#:cmd-draw-mesh-tasks#:destroy-pipeline#:create-sampler#:destroy-sampler#:create-color-render-pass#:create-depth-render-pass#:destroy-render-pass#:create-framebuffer#:destroy-framebuffer#:create-storage-image-descriptor-pool#:create-uniform-buffer-descriptor-pool#:create-texture-sampler-uniform-descriptor-pool#:destroy-descriptor-pool#:allocate-descriptor-set#:update-storage-image-descriptor#:update-uniform-buffer-descriptor#:update-texture-sampler-uniform-descriptors#:create-command-pool#:destroy-command-pool#:allocate-command-buffer#:begin-command-buffer#:end-command-buffer#:cmd-transition-image#:cmd-clear-color-image#:cmd-copy-image#:cmd-copy-buffer-to-image#:cmd-copy-image-to-buffer#:cmd-bind-compute-pipeline#:cmd-bind-graphics-pipeline#:cmd-bind-compute-descriptor-set#:cmd-bind-graphics-descriptor-set#:cmd-bind-vertex-buffer#:cmd-bind-index-buffer#:cmd-dispatch#:cmd-begin-color-render-pass#:cmd-begin-depth-render-pass#:cmd-set-viewport-and-scissor#:cmd-set-scissor#:cmd-end-render-pass#:cmd-draw#:cmd-draw-indexed#:submit-command-buffers#:submit-command-buffer#:queue-wait-idle#:surface-supported-p#:presentation-capabilities#:presentation-capabilities-min-image-count#:presentation-capabilities-max-image-count#:presentation-capabilities-current-extent#:presentation-capabilities-min-image-extent#:presentation-capabilities-max-image-extent#:presentation-capabilities-current-transform#:presentation-capabilities-composite-alpha#:presentation-capabilities-usage#:get-surface-capabilities#:presentation-timing-capabilities#:presentation-timing-capabilities-supported-p#:presentation-timing-capabilities-absolute-time-p#:presentation-timing-capabilities-relative-time-p#:presentation-timing-capabilities-stages#:presentation-timing-capabilities-present-id-2-p#:get-presentation-timing-surface-capabilities#:presentation-format#:presentation-format-format#:presentation-format-color-space#:get-surface-formats#:get-surface-present-modes#:create-swapchain#:destroy-swapchain#:get-swapchain-images#:swapchain-timing-properties#:swapchain-timing-properties-refresh-duration#:swapchain-timing-properties-refresh-interval#:set-swapchain-present-timing-queue-size#:get-swapchain-timing-properties#:get-swapchain-time-domains#:map-past-presentation-timings#:create-semaphore#:create-timeline-semaphore#:destroy-semaphore#:semaphore-counter-value#:wait-semaphore-value#:acquire-next-image#:present

luv is the public GPU, canvas, and native-host vocabulary. The block world and application live in luvcraft.WORLD and luvcraft.

eval-when
:compile-toplevel:load-toplevel:execute

live-shader-pipeline moved from luvcraft into luv. A durable image may still have the former package's complete private implementation interned; remove that obsolete vocabulary before luv exports the canonical names.

let
package
find-package'#:luvcraft
whenpackage
let
prefix"LIVE-SHADER-PIPELINE-"
obsoletenil

Do not mutate a package while DO-SYMBOLS is walking its hash tables. Durable-image migration is rare, but it must be as deterministic as an ordinary cold load.

do-symbols
symbolpackage
let
name
symbol-namesymbol
when
and
eqpackage
symbol-packagesymbol
or
string=name"LIVE-SHADER-PIPELINE"
and
<=
lengthprefix
lengthname
string=prefixname:end2
lengthprefix
membername'
"BUILD-LIVE-SHADER-PIPELINE-CANDIDATE""INSTALL-LIVE-SHADER-PIPELINE-CANDIDATE""MAKE-LIVE-SHADER-PIPELINE""REFRESH-LIVE-SHADER-PIPELINE""RELEASE-LIVE-SHADER-PIPELINE"
:test#'string=
pushsymbolobsolete
dolist
symbolobsolete
let
name
symbol-namesymbol
when
eq:external
nth-value1
find-symbolnamepackage
unexportsymbolpackage
uninternsymbolpackage
eval-when
:compile-toplevel:load-toplevel:execute

The named release scope now belongs to luv. Remove the former owned luvcraft symbols before exporting the shared spellings into a package which an existing durable luvcraft package already uses.

let
package
find-package'#:luvcraft
whenpackage
dolist
name'
"*RELEASE-FAILURES*""LUVCRAFT-RELEASE-ERROR""LUVCRAFT-RELEASE-ERROR-FAILURES""CALL-RELEASING""RELEASING""WITH-RELEASE-REPORT""WITH-RELEASE-WARNINGS"
multiple-value-bind
symbolstatus
find-symbolnamepackage
when
andsymbolstatus
eqpackage
symbol-packagesymbol
when
eqstatus:external
unexportsymbolpackage
uninternsymbolpackage
defpackage#:luv
:use#:cl
:export#:*gpu-provider*#:*tracy*#:start-tracy#:stop-tracy#:tracy-connected-p#:tracy-client-available-p#:with-tracy-zone#:tracy-frame-mark#:tracy-plot#:configure-tracy-plot#:tracy-message#:name-tracy-thread#:tracy-source-location#:tracy-zone-name#:*cpu-trace*#:cpu-trace#:cpu-trace-zone#:make-cpu-trace#:reset-cpu-trace#:with-cpu-trace#:with-cpu-trace-zone#:zone#:zdefun#:zdefmethod

Honest application cleanup and one-owner stop publication.

#:release-failure#:release-failure-name#:release-failure-condition#:release-error#:release-error-failures#:release-warning#:release-warning-failures#:release-warning-primary-condition#:call-with-release-report#:with-release-report#:call-with-release-warnings#:with-release-warnings#:call-with-release-unwind#:unwind-protect-releasing#:releasing#:stop-controller#:make-stop-controller#:make-canvas-stop-controller#:stop-controller-name#:stop-controller-state#:stop-controller-condition#:stop-controller-result-values#:stop-controller-error#:stop-error-controller#:stop-controller-blocking-thread-error#:stop-error-operation#:recursive-stop-error#:stop-not-started-error#:stop-operation-aborted#:application-attachment-closed#:application-attachment-closed-controller#:application-attachment-closed-attachment#:application-attachment-closed-state#:call-with-running-stop-controller#:call-with-stop-controller#:request-controlled-stop#:wait-for-controlled-stop#:cpu-trace-zones#:cpu-trace-zone-name#:cpu-trace-zone-parent-index#:cpu-trace-zone-depth#:cpu-trace-zone-seconds#:cpu-trace-zone-bytes-consed#:cpu-trace-zone-self-bytes-consed#:cpu-trace-zone-gc-seconds#:cpu-trace-zone-self-gc-seconds#:cpu-trace-zone-garbage-collections#:cpu-trace-garbage-collections#:runtime-observation#:make-runtime-observation#:runtime-observation-elapsed-seconds#:runtime-observation-bytes-consed#:runtime-observation-gc-seconds#:runtime-observation-garbage-collections#:with-runtime-observation#:print-cpu-trace#:gpu-error#:gpu-error-operation#:gpu-request-error#:gpu-request-error-descriptor#:gpu-request-error-reason#:gpu-request-error-details#:gpu-object-error#:gpu-object-error-object#:gpu-object-destroyed-error#:gpu-invalid-state-error#:gpu-invalid-state-error-state#:gpu-invalid-state-error-expected-state#:gpu-device-mismatch-error#:gpu-device-mismatch-error-expected-device#:gpu-device-mismatch-error-actual-device#:gpu-usage-error#:gpu-usage-error-required-usage#:gpu-usage-error-actual-usage#:gpu-resource-leaked#:gpu-resource-leaked-class#:gpu-resource-leaked-label#:*leaked-gpu-resources*#:gpu-native-retirement-condition#:gpu-native-retirement-warning#:gpu-native-retirement-error#:gpu-native-retirement-operation#:gpu-native-retirement-failures#:gpu-native-retirement-failure#:gpu-native-retirement-failure-resource#:gpu-native-retirement-failure-cause#:gpu-native-retirement-failure-attempts#:vulkan-gpu-error#:vulkan-gpu-error-reason#:vulkan-gpu-error-details#:gpu-provider#:gpu-device#:gpu-queue#:gpu-buffer#:gpu-buffer-size#:gpu-buffer-usage#:gpu-texture#:gpu-texture-size#:gpu-texture-usage#:gpu-texture-dimensions#:gpu-texture-format#:gpu-texture-view#:gpu-texture-view-texture#:gpu-sampler#:gpu-shader-module#:gpu-bind-group-layout#:gpu-bind-group#:gpu-compute-pipeline#:gpu-render-pipeline#:gpu-temporal-scaler#:gpu-temporal-scaler-input-size#:gpu-temporal-scaler-output-size#:gpu-temporal-scaler-color-usage#:gpu-temporal-scaler-depth-usage#:gpu-temporal-scaler-motion-usage#:gpu-temporal-scaler-output-usage#:gpu-encoder#:gpu-render-pass-encoder#:gpu-compute-pass-encoder#:gpu-command-encoder#:gpu-command-buffer#:gpu-command#:gpu-queue-command#:gpu-command-encoder-command#:gpu-pass-command#:gpu-render-pass-command#:gpu-compute-pass-command#:gpu-draw-command#:gpu-draw-indexed-command#:gpu-draw-mesh-command#:gpu-set-pipeline-command#:gpu-set-bind-group-command#:gpu-set-vertex-buffer-command#:gpu-dispatch-workgroups-command#:gpu-clear-texture-command#:gpu-copy-texture-command#:gpu-copy-texture-to-buffer-command#:gpu-write-texture-command#:gpu-prepare-texture-command#:gpu-temporal-scale-command#:gpu-signal-temporal-scaler-command#:gpu-wait-temporal-scaler-command#:gpu-object-label#:request-gpu-device#:device-queue#:create#:adopt-native-texture#:encode#:enqueue#:finish#:submit#:submitted-work-done#:write-buffer#:read-buffer#:read-buffer-if-ready#:write-texture#:destroy#:begin-compute-pass#:begin-render-pass#:end-pass#:set-pipeline#:set-bind-group#:set-vertex-buffer#:set-scissor-rect#:dispatch-workgroups#:draw#:draw-indexed#:draw-mesh-workgroups#:make-device-descriptor#:make-buffer-descriptor#:make-texture-descriptor#:texture-format-bytes-per-texel#:texture-format-sample-transfer#:vertex-attribute-format-component-count#:make-texture-copy#:texture-copy-texture#:texture-copy-mip-level#:texture-copy-origin#:texture-copy-aspect#:make-texture-data-layout#:texture-data-layout-offset#:texture-data-layout-bytes-per-row#:texture-data-layout-rows-per-image#:make-texture-view-descriptor#:make-sampler-descriptor#:make-shader-module-descriptor#:shader-module-descriptor-code#:shader-module-descriptor-language#:make-bind-group-layout-descriptor#:make-bind-group-descriptor#:make-compute-pipeline-descriptor#:make-render-pipeline-descriptor#:make-mesh-render-pipeline-descriptor#:make-render-pass-descriptor#:make-command-encoder-descriptor#:make-temporal-scaler-descriptor#:make-gpu-clear-texture-command#:make-gpu-copy-texture-command#:make-gpu-copy-texture-to-buffer-command#:make-gpu-write-texture-command#:make-gpu-prepare-texture-command#:prepare-texture#:make-gpu-temporal-scale-command#:encode-temporal-scale#:make-gpu-signal-temporal-scaler-command#:signal-temporal-scaler-inputs#:make-gpu-wait-temporal-scaler-command#:wait-temporal-scaler-output#:make-gpu-set-pipeline-command#:make-gpu-set-bind-group-command#:make-gpu-set-vertex-buffer-command#:make-gpu-dispatch-workgroups-command#:make-gpu-draw-command#:make-gpu-draw-indexed-command#:make-gpu-draw-mesh-command

Application-owned derivatives of live source.

#:application-live-artifacts#:live-artifact-label#:live-artifact-status#:live-artifact-diagnostic#:live-artifact-installed-revision#:refresh-live-artifact#:release-live-artifact#:refresh-application-live-artifacts#:live-shader-pipeline#:live-shader-pipeline-diagnostic#:live-shader-pipeline-installed-revision#:live-shader-pipeline-installed-source-revision#:live-shader-pipeline-installed-source-values#:live-shader-pipeline-attempted-source-values#:live-shader-pipeline-lowering#:live-shader-pipeline-role#:live-shader-pipeline-specification#:live-shader-pipeline-stage#:live-shader-pipeline-status#:live-shader-pipeline-vertex-lowering#:live-shader-pipeline-vertex-role#:live-shader-pipeline-vertex-specification#:live-shader-pipeline-layout#:live-shader-pipeline-native-pipeline#:make-live-shader-pipeline#:refresh-live-shader-pipeline#:release-live-shader-pipeline

GPU-native screenshots and films of live applications.

#:application-capture#:application-capture-busy#:application-capture-busy-application#:application-capture-busy-active-capture#:application-capture-busy-requested-capture#:application-capture-shutting-down#:application-capture-shutting-down-application#:application-capture-shutting-down-requested-capture#:application-capture-shutdown-blocking-thread-error#:application-capture-shutdown-blocking-application#:application-capture-shutdown-blocking-active-capture#:application-capture-shutdown-p#:request-application-capture-shutdown#:call-if-application-captures-open#:quiesce-application-captures#:capture-kind#:capture-option#:capture-extent#:capture-format#:capture-target#:capture-readback-buffer#:capture-frame-index#:capture-client-state#:capture-canvas#:prepare-capture#:advance-capture-frame#:encode-capture-frame#:cleanup-capture#:capture-application-screenshot#:capture-application-film#:vulkan-gpu-provider#+darwin #:metal-gpu-provider#+darwin #:metal-gpu-device#+darwin #:metal-gpu-queue#+darwin #:metal-gpu-command-encoder#+darwin #:metal-gpu-command-buffer#+darwin #:metal-gpu-buffer#+darwin #:metal-gpu-texture#+darwin #:metal-gpu-shader-module#+darwin #:metal-gpu-render-pipeline#+darwin #:metal-gpu-mesh-render-pipeline#+darwin #:metal-device-compiler#+darwin #:metal-shader-module-document#+darwin #:metal-shader-module-entry-point#+darwin #:metal-shader-module-function-type#+darwin #:metal-render-pipeline-depth-stencil-state#+darwin #:metal-render-pipeline-vertex-buffers#+darwin #:metal-render-pass-encoder#+darwin #:metal-render-pass-argument-table#:vulkan-provider-application-name#:vulkan-provider-debug-callback#:vulkan-provider-debug-severities#:vulkan-provider-debug-types#:vulkan-device-instance-extension-names#:vulkan-device-debug-messenger#:canvas-clock#:canvas-event-handler#:canvas-event#:canvas-event-timestamp#:canvas-pointer-event#:canvas-pointer-event-x#:canvas-pointer-event-y#:canvas-pointer-event-delta-x#:canvas-pointer-event-delta-y#:canvas-pointer-motion-event#:canvas-pointer-enter-event#:canvas-pointer-exit-event#:canvas-pointer-button-event#:canvas-pointer-event-button#:canvas-pointer-event-clicks#:canvas-pointer-button-press-event#:canvas-pointer-button-release-event#:canvas-pointer-wheel-event#:canvas-pointer-event-scroll-x#:canvas-pointer-event-scroll-y#:canvas-key-event#:canvas-key-event-key-name#:canvas-key-event-modifiers#:canvas-key-event-character#:canvas-key-event-unshifted-character#:canvas-key-event-repeat-p#:canvas-key-press-event#:canvas-key-release-event#:canvas-window-event#:canvas-window-size-event#:canvas-window-event-width#:canvas-window-event-height#:canvas-window-resized-event#:canvas-window-pixel-size-changed-event#:canvas-window-focus-gained-event#:canvas-window-focus-lost-event#:canvas-window-close-request-event#:handle-canvas-event#:demand-clock#:cadence-clock#:make-demand-clock#:make-cadence-clock#:clock-frames-per-second#:clock-frame-function#:clock-wait-timeout#:service-canvas-clock#:canvas#:canvas-context#:context-canvas#:context-device#:canvas-error#:canvas-error-canvas#:canvas-error-operation#:canvas-error-reason#:canvas-error-details#:canvas-state-error#:canvas-state-error-state#:canvas-state-error-expected-state#:canvas-dispatch-timeout#:canvas-dispatch-timeout-seconds#:*canvas-dispatch-timeout*#:log-event#:*log-enabled-p*#:*log-categories*#:*log-stream*#:canvas-health#:canvas-stalled-seconds#:canvas-failure#:canvas-failure-serial#:canvas-failure-canvas#:canvas-failure-phase#:canvas-failure-universal-time#:canvas-failure-tick#:canvas-failure-condition#:canvas-failure-report#:canvas-failure-backtrace#:canvas-failures#:canvas-failures-since#:canvas-failure-serial-now#:report-canvas-failure#:retain-canvas-failure#:capture-backtrace-string#:*canvas-failure-limit*

Vulkan validation, reported as conditions.

#:vulkan-validation-problem#:vulkan-validation-failure#:vulkan-validation-complaint#:vulkan-validation-problem-operation#:vulkan-validation-problem-notes#:vulkan-validation-note#:vulkan-validation-note-severity#:vulkan-validation-note-types#:vulkan-validation-note-id-name#:vulkan-validation-note-id-number#:vulkan-validation-note-text#:vulkan-validation-note-backtrace#:vulkan-validation-note-error-p#:note-vulkan-debug-message#:check-vulkan-validation#:with-vulkan-validation#:*vulkan-validation-enabled-p*#:*vulkan-validation-backtrace-p*#:open-canvases#:resume-canvas-frames#:hold-canvas-frames#:release-canvas-frames#:call-with-canvas-frames-held#:with-canvas-frames-held#:fence-canvas#:fence-canvases#:*canvas-events-held-p*#:*canvas-event-wait-slice*#:*canvas-watchdog-interval*#:*canvas-watchdog-warn-seconds*#:*canvas-watchdog-sample-seconds*#:*canvas-watchdog-fatal-seconds*#:*canvas-watchdog-inhibit-hook*#:canvas-configuration#:make-canvas-configuration#:canvas-configuration-device#:canvas-configuration-format#:canvas-configuration-usage#:get-current-texture#:sdl-canvas#:make-sdl-canvas#:sdl-canvas-presentation-api#:sdl-presentation-api-for#:vulkan-canvas-context#:vulkan-canvas-presentation-timing-snapshot#:print-vulkan-canvas-presentation-timing#:write-vulkan-canvas-presentation-timing-csv#:presentation-timing-snapshot#:presentation-timing-snapshot-status#:presentation-timing-snapshot-reason#:presentation-timing-snapshot-stage#:presentation-timing-snapshot-time-domain#:presentation-timing-snapshot-time-domain-id#:presentation-timing-snapshot-absolute-time-p#:presentation-timing-snapshot-refresh-duration#:presentation-timing-snapshot-refresh-interval#:presentation-timing-snapshot-dropped-count#:presentation-timing-snapshot-observations#:presentation-timing-observation#:presentation-timing-observation-present-id#:presentation-timing-observation-predicted-seconds#:presentation-timing-observation-submitted-seconds#:presentation-timing-observation-target-nanoseconds#:presentation-timing-observation-actual-nanoseconds#:presentation-timing-observation-actual-time-domain#:presentation-timing-observation-actual-time-domain-id#+darwin #:metal-canvas-context#:canvas-title#:canvas-thread-p#:canvas-width#:canvas-height#:canvas-size#:canvas-logical-size#:canvas-position#:canvas-visible-p#:canvas-fullscreen-p#:canvas-clipboard-text

Sound out; hal/sdl/audio.lisp.

#:audio-sink#:open-audio-sink#:close-audio-sink#:audio-sink-open-p#:audio-sink-rate#:audio-sink-channels#:push-audio-sink-mono#:audio-sink-queued-frames#:audio-sink-queued-seconds#:audio-sink-played-frames#:audio-sink-frames-pushed#:clear-audio-sink#:audio-sink-gain#:set-canvas-fullscreen#:set-canvas-relative-pointer-mode#:show-canvas#:hide-canvas#:move-canvas#:resize-canvas#:raise-canvas#:minimize-canvas#:restore-canvas#:request-canvas-frame#:lazy-clock#:make-lazy-clock#:lazy-clock-now#:lazy-clock-now-unadjusted#:clear-lazy-clock#:call-with-lazy-clock-time#:canvas-time#:canvas-time-unadjusted#:canvas-presentation-time#:make-presentation-clock#:make-canvas-context#:configure-canvas-context#:unconfigure-canvas-context#:destroy-canvas-context#:call-with-canvas-frame#:canvas-device#:canvas-extent#:canvas-format#:canvas-state#:canvas-context-state#:canvas-frame-resource-key#:call-with-sdl-main-thread#:open-canvas#:present-canvas-frame#:render-canvas-color#+darwin #:probe-sdl-metal-clear#+darwin #:probe-metal-shader-library#:probe-metal-render-pipeline#:clear-color-demo#:demo-canvas#:demo-context#:demo-speed#:start-clear-color-demo#:stop-clear-color-demo#:compute-gradient-demo#:start-compute-gradient-demo#:stop-compute-gradient-demo#:render-metal-analytic-roundrect-proof#:render-metal-slug-bezier-proof#:render-metal-slug-outline#:render-metal-slug-glyph#:render-metal-slug-text#:write-rgba-png#:call-with-video-encoder#:with-video-encoder

Reproducible wiki media

#:capture-specification#:capture-specification-name#:capture-specification-figure-id#:capture-specification-kind#:capture-specification-description#:capture-specification-extension#:capture-specification-layout#:define-capture#:register-capture-specification#:capture-specifications#:find-capture-specification#:capture-output-pathname#:render-capture#:render-capture-set#:capture-op#:close-canvas