Draw offscreen and send frames to an Elixir process. Set this record as
Emerge.Config.output.
%Emerge.Config{
output: %Emerge.Config.Headless{target: self(), size: {400, 300}},
renderer: %Emerge.Config.Renderer{api: :raster},
assets: %Emerge.Config.Assets{otp_app: :my_app}
}Fields
size— output{width, height}in positive integer pixels; defaults to{800, 600}.target— the live local PID receiving frames. You must supply it; the defaultnilis not valid when starting a headless renderer.frame_message— message tag, an atom or string; defaults to:emerge_skia_frame.frames—%Emerge.Config.BinaryFrames{}(default) for owned pixel data, or%Emerge.Config.PrimeFrames{}for Linux DMA-BUF output. Use an explicit struct to choose the format.
The target receives {frame_message, %VideoInterop.Frame{}}. Binary frames
need no release; PRIME frames have a lease the recipient must release.
Headless output has no physical keyboard or pointer input.
Changing settings
These fields require a new viewport. The frame-rate limit lives in
Emerge.Config.Renderer.target_fps and can change through config.
Summary
Types
@type normalized_t() :: %Emerge.Config.Headless{ frame_message: atom() | String.t(), frames: Emerge.Config.BinaryFrames.normalized_t() | Emerge.Config.PrimeFrames.normalized_t(), size: {pos_integer(), pos_integer()}, target: pid() | nil }
Canonical form after nested keyword records have been expanded.
@type t() :: %Emerge.Config.Headless{ frame_message: atom() | String.t(), frames: Emerge.Config.BinaryFrames.t() | Emerge.Config.PrimeFrames.t(), size: {pos_integer(), pos_integer()}, target: pid() | nil }