video_displaymodes(3)
okay so bestie, this is the video_displaymodes glow-up from the Arcan Lua API β manual page video_displaymodes(3) β and itβs giving βtiny function, huge display energy.β π The vibe: retrieve (or set) platform-specific output display options. No cap.
πΈ NAME πΈ
video_displaymodes β retrieve (or set) platform-specific output display options. π
β¨ SYNOPSIS β¨
modelist or nil or bool
video_displaymodes( int:id )
video_displaymodes( int:id, int:modeid )
video_displaymodes( int:id, int:modeid, tbl:modeopts )
video_displaymodes( int:id, int:width, int:height )
π¦ DESCRIPTION π¦
Some video platforms let the user dynamically change how output is being mapped. This is necessary for multiple- display support and for changing video configuration and behavior when a user hotplugs a display. π«Ά
There are four ways to use this function. Bestie, letβs break them down:
- no arguments at all β the underlying video platform gets asked to do a rescan of devices and connectors. This can stall graphics for noticable (
100ms+) periods of time on some systems, but itβs necessary where we donβt have working hotplug support. Itβs also an asynchronous process, and any results will be propagated as_display_stateevents. β³ - display index β returns a table of possible modes.
- display index + a
modeidobtained from a previous table fromvideo_displaymodesβ attempts to switch the display to that mode, and returns success or not as a boolean. - display index +
width+heighton a display that supports dynamic (caller-defined) modes β tries to force that specific dynamic mode, and returns success or not as a boolean.
The mode switch can be further hinted by providing a modeopts table. The valid keys for this table are:
*modeopts:number:vrr*β sets the refresh rate target (Hz), or a<= 0value for letting the platform dynamically decide.*modeopts:int:quality*β sets the mode scanout quality. This overrides the behaviour forWORLDIDand directly composited output only. If another rendertarget has been set as the direct output throughmap_video_display, then the properties of the rendertarget store takes precendent. The permitted quality options are the same as foralloc_surface:ALLOC_QUALITY_LOW(typically RGB 565),ALLOC_QUALITY_NORMAL( RGB 888),ALLOC_QUALITY_HIGH(R10G10B10, "deep"),ALLOC_QUALITY_FLOAT 16( HDR - FP 16) orALLOC_QUALITY_FLOAT 32( HDR - FP 32).
π§ NOTES π§
- possible
modelisttable members are:cardid,displayid,phy_width_mm,phy_height_mm,subpixel_layout,dynamic,primary,modeid,width,height,refresh,depth
π EXAMPLE π
the pageβs example, in all its iconic glory:
function video_displaymodes0()
local list = video_displaymodes(0);
if (#list == 0) then
return shutdown("video platform did not expose any modes.");
end
for i,v in ipairs(list) do
print(string.format("(%d) display(%d:%d)" ..
"dimensions(%d * %d) @ %d Hz, depth: %d0,
v.modeid, v.cardid, v.displayid, v.width,
v.height, v.refresh, v.depth)
);
end
print("swiching modes0);
video_displaymodes(0, list[math.random(#list)].modeid);
print("modes switched0);
end
π MISUSE π
and hereβs the misuse section, because the page said so:
function video_displaymodes0()
video_displaymodes("not acceptable");
end
π SEE ALSO: π
vidsys β thatβs the ref, bestie. Go look. π
later, bestie! this was video_displaymodes(3) from the vidsys source/version, dated October 2026 β mwah π
β¨
π¦ where this page comes from
- nixos 26.05: arcan 0.7.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms