Bjorn Stahl edited this page Aug 2, 2018 · 33 revisions



  • added support for sliced vstores (cubemap, 3d texture)
  • rendertarget_ids are now exposed as a uniform (for stereo rendering)
  • ugly 1-tick animation timer discard bug fixed
  • fixed video layer display- duplication bug on crash recovery
  • synchronization layer refactor for future multi-GPU/on-demand and multithreaded client processing
  • added system scripts namespace for better sharing between projects
  • expose target_flag controls for deferred / script-locked resize control


  • Switched the default careful usermask to match usermask
  • updated function, build_3dbox - added face split option
  • depth function controls added
  • new function, image_storage_slice - for converting and synching a sliced store
  • new function + builtin uniform, rendertarget_id => rtgt_id - for distinguishing between target rendertarget at the shader stage
  • new functions for 3d mesh and navigation: build_sphere, build_cylinder, step3d_model
  • updated 3d motion functions to accept interpolation function arguments
  • exit_silent argument added to shutdown so clients switch to recover state
  • displayhint constants fixed for maximized and fullscreen states
  • mesh_shader now behaves like image_shader (string and numerical ids accepted)
  • histogram_impose can now work with row offsets
  • update_handler on frameserver in terminal state will be _fatal rejected
  • load_fail forward fix to asynchronous image loading
  • build_plane now also permits a vertically oriented mesh
  • image_tesselation function now expose depth buffer controls
  • resample_image extended to allow source vstore snapshotting
  • fix to crash recovery being misinterpreted for -b :self
  • open_nonblock now also supports domain sockets
  • new function, rendertarget_range for masking out rendering of objects based on order
  • add EXIT_SILENT option to shutdown() to allow clients to live on after display server shutdown
  • resettransform now returns remaining time for each transform slot
  • improved (debug build only) trace output on script errors in callback
  • added entry point _fatal(msg)->str triggered on scripting error for better custom error reporting


  • voidlinux - packages upstreamed for (arcan, durden, arcan-wayland, xarcan, aclip, aloadimage)


  • restructure to allow more complicated accelerated handle passing
  • egl-dri: tty- switch regression fix
  • egl-dri: context management reworked in preparation of threaded/mixed 10-bit/8-bit outputs
  • linux/openbsd: much improved privilege separation support


  • devicehint- now carries metadata about accepted buffer formats
  • default handlers (when client provides no implementation) for pushed segments are now supported
  • ground work for hidden fallback implementation of force-pushed subsegments
  • last_word mechanism added to communicate a user-readable string for abnormal termination
  • ground work for 'per-scanline' like dirty transfers
  • add helper function, arcan_shmif_handover_exec for delegating subwindows to child processes


  • reworked timing code (again)
  • force-push debug segment now provides a default state debug output window


  • Add support for starting position hint
  • Noaudio argument added
  • Add default bindings for seek controls
  • Add optional (default off) libuvc based webcam access


  • Added support for xdg_wm_base protocol
  • eglSwapBuffer() client livelock race fixed
  • mouse wheel scrolling fixes
  • added controls for specifying temp folder prefix in -exec mode


  • Add support for resetting default "forward" orientation


  • subwindow semantics simplified
  • add support for dynamic loading
  • controls for setting semantic label to color mapping
  • fix to writestr / erase_region dirty- tracking


  • added acfgfs tool to mount durden- like menus as a FUSE filesystem


  • multiple rpath / osx build fixes
  • add controls for manual disable fsrv archetypes
  • dropped a number of < 3.0 cmake behaviors and bumped required version
  • egl-dri platform now defaults to adding arcan binary suid



  • VR support now covers the full path from bridge communicating metadata and limb discovery/loss/map/updates.
  • (71939f) -0,-1 pipes and filters input setup added, covered in AWK for Multimedia.
  • format-string render functions extended with vid-subimage blit
  • generate GUIDs for launched frameservers


  • New function: define_linktarget used to create an offscreen render pipeline that is tied to the pipeline of another rendertarget.
  • New function: subsystem_reset used to rebuild subsystems (video only for now) to allow live driver upgrades, active GPU switching and so on - without losing state
  • Updated function: camtag_model, change to allow forcing destination rendertarget
  • Updated function: image_tesselation, expose index access
  • Updated function: render_text, added evid,w,h and Evid,w,h,x1,y1,x2,y2
  • Updated function: launch_avfeed, added guid as return
  • Forward current cached GUID on device hint


  • Persist GUID across migration
  • Allow incoming devicehint events to update 'last known guid'
  • Removed reconnect backoff delay


  • Support for ligatures improved
  • Highlighting/Inverse/Full-Block cursor changed for better visibility
  • Added controls to "screenshot" the current window into a new (input label: COPY_WINDOW)
  • Copy Windows can be set to be the primary clipboard receiver (input label: SELECT_TOGGLE)


  • Add preinit stage to event and video subsystems for acquiring / dropping privileges
  • Added chacha20 csprng and cipher
  • OpenBSD: added mouse support
  • Egl-Dri: swap-GPU slot added to db- based configuration
  • SDL2: improved keyboard and mouse support


  • Initial support for OpenHMD


  • Ported to OpenBSD


  • Fixes to subsurface allocations
  • -egl-shm argument added, perform shm->dma_buf conversion in bridge to offload server
  • single exec mode (arcan-wayland -exec /my/bin) for stronger separation between clients
  • add support for rebuilding client (crash recovery and migration) described in (crash-resilient wayland compositing)[]
  • basic seccomp syscall filtering


  • First draft version, will be the main focus of the 0.6- series of releases.



  • Refactored frameserver- spawning parts to cut down on duplicated code paths and make setup/control more streamlined.
  • Added support for tessellated 2D object, with more fine-grained control over individual vertices.
  • Extended agp_mesh_store to cover what will be needed for full glTF2.
  • Crash-recovery procedure for external clients now also applies to scripting layer errors when there is no fallback appl set.
  • Reworked font/format string code to bleed less state and automatically re-raster if the outer object is attached to a rendertarget with a different output density.
  • Added additional anchoring points to linked images (center-left, center-top, center-right, center-bottom)
  • VR- mapping work for binding external sensor "limbs" to 3d models.


  • New function: image_tesselation, used to change subdivisions in s and t directions, and to access and change individual mesh attributes.
  • New function: rendertarget_reconfigure, used to change the target density of a rendertarget.
  • New functions: vr_map_limb, vr_metadata
  • Updated function: define_rendertarget. It now returns status, accepts more mode flags (MSAA) and allows target density specification.
  • Updated function: alloc_surface. It now allows additional backend storage formats, (FP16, FP32, alpha-less, RGB565, ...)
  • Updated function: link_image, added additional anchoring points


  • New library, arcan-shmif-server. This is used for proxying / multiplexing additional connection unto an established one. Primary targets for this lib is a networking proxy and for TUI/Terminal to support delegating decode/rendering to other processes.
  • Added support for HANDOVER subsegments, these are subsegments that mutate into primary segments in order to reuse a connection to negotiate new clients without exposing a listening channel.


  • Dissemination article:
  • support for bitmapped fonts (PSFv2) as an optional path for faster rendering on weak hardware.
  • Built-in bitmapped terminus for three densities/sizes (small, normal, large) as fallback.
  • Added dynamic color-scheme updates.
  • Rendering-layer reworked to support shaping, custom blits, ...
  • Experimental double buffered mode (ARCAN_ARG=dblbuf)
  • Experimental smooth scrolling in normal mode (ARCAN_ARG=scroll=4)
  • Experimental shaping mode kerning for non-monospace fonts (ARCAN_ARG=shape)
  • Experimental ligature/substitution mode for BiDi/i8n/"code fonts" via Harfbuzz (ARCAN_ARG=substitute)
  • Lua bindings and tool for testing them out (src/tools/ltui)


  • Refactored use of environment variables to a configuration API
  • EGL-DRI: VT switching should be noticeably more robust, EGL libraries can now be dynamically loaded/reloaded to account for upgrades or per-GPU sets of libraries.
  • AGP: Updated GLES2 backend to work better with BCM drivers.
  • Evdev: Added optional support for using xkblayouts to populate the utf8 field.
  • EGL-GLES: quick fixes to bring BCM blobs back to life on rPI.
  • OpenBSD: initial port bring-up, keyboard input and graphics working.
  • SDL2: added SDL2 based video/event platform implementation, some input issues left to sort out before 1.2 support can be deprecated and this be the default on OSX.


  • Aloadimage: basic support for SVG images
  • Doc: started refactoring lua API documentation format to double as IDL for re-use of lua API as privileged drawing and WM- protocol.


  • XKB- Layout transfer support, basic pointer and pointer surface (wl_seat)
  • Damage Regions, dma-buf forwarding (wl_surf)
  • More stubs (data_device/data_device manager/data_offer/data source)
  • zxdg-shell mostly working (toplevel, positioners, popup)
  • added support for relative_pointer motion



  • LED subsystem reworked: Support hotplug, synthesized LED devices, added support for a FIFO protocol for communicating with external LED controllers
  • Accelerated Graphics: refactored to be dynamically (re-)loadable, getting closer to multi-vendor-multi-GPU support and GPU hotplugging.
  • Driver backend update: external-launch reloads accelerated graphics library, getting closer to runtime driver upgrades
  • Initial HMD/VR support: Early stages, spawn a subprocess for device control and input fusion/sampling with mapping to a virtual skeleton
  • Allow direct-to-drain enqueue for out-of-band high-priority events

Tools (src/tools) / Backends (separate repositories)

  • waybridge: (new) (alpha state, see wiki wayland notes) wayland protocol service
  • xarcan: (new) xserver with shmif driver backend
  • qemu: input state- fixes, closer to working multi-display and virgil support
  • SDL: improved synchronization, mouse and multi-window support
  • vrbridge: (new) basic integration skeleton and partial PSVR support (unusable)
  • aclip: (new) clipboard manager for translation between appl- and command-line
  • aloadimage: (new) image viewer with parser sandboxing
  • shmmon: (new) debugging tool for inspection of shmif- connection dumps or single client state from scraping proc
  • openal: patched backend can now be built standalone, back to working state for LWA


  • New segid subtypes: WIDGET, BRIDGE_X11, BRIDGE_WL, SERVICE
  • Two new sub-libraries: shmif_ext (extended accelerated rendering setup convenience) and shmif_tui (text user interface)
  • _open_ext added exposing additional initial-registration fields
  • Extended connection protocol to include a preroll stage which act as a collection phase for fonts, outputs, language, etc. in order to cut down on initial setup complexity and reduce connect-to-draw latency.
  • added _initial structure that conveys information gathered during the preroll stage
  • add VSIGNAL RHINT to support event- based notification on frame delivery for some I/O multiplexation edge cases
  • Engine-side reservable misc- buffer added to shmpage layout for specialized I/O devices that would saturate the event queues when dealing with latency-sensitive high-samplerate input devices
  • Negotiable extended mapping for synchronizing gamma/color information
  • Negotiable (placeholder/incomplete) extended mapping for supporting HDR source contents
  • Negotiable (placeholder/incomplete) extended mapping for vector content transfer


  • egl-dri: backlight support exposed as a LED controller, VT switch stability fixes, EGLStreams support moved from the egl-nvidia platform, removed egl-nvidia, add switchable synchronization strategies for fast, adaptive or conservative.
  • evdev: devices with LEDs now get mapped to a corresponding LED controller.
  • agp: exposed more color packing formats.


  • Tuning to resize/- refresh cpu v latency tradeoffs
  • Refactored codebase and split out drawing/shmif- integration etc. into using shmif_tui.
  • Minor bugfixes related to color parsing, added blink speed control


  • Deprecated: LED_CONTROLLERS constant
  • target- event propagation extended:
  • Added functions: hmd_setup, define_arcantarget (LWA only, experimental)
  • Updated functions: controller_leds, set_led, set_led_intensity, set_led_rgb, open_nonblock, audio_gain, video_displaygamma, decode_modifiers, target_flags, add_3dmesh
  • Added aliases: image_surface, image_surface_storage, image_surface_resolve (dropped properties suffix)
  • Updated events: display_state (additional fields for backlight) input (status: extended label fields, device reference, device domain) target (expose "bchunkstate", "preroll")


  • partial/incomplete: requesting/rendering to subsegments (icon, titlebar, popup, ...) via define_arcantarget
  • improvements to runtime DPI switching and automated resize-response
  • runtime server controlled 'default font' and 'default font size' switching



	* New functions: target_devicehint (control accelerated device use and connection points),
	                 video_displaygamma (access low-level display gamma ramps),
	                 rendertarget_vids (enumerate rendertarget- attachments)
	* Update functions: target_displayhint(synch controls), set_context_attachment(can now query),
	                    rendertarget_forceupdate(change rate after creation), target_seek(can now
	                    specify seek domain), system_collapse (can now disable frameserver-vid


	* Added shmif_ext support library for reusing the boiler plate in setting up
              egl surfaces, creating contexts and performing handle passing.
	* Audio buffer negotiation is now allowed to  now switch samplerate
	* Structure for specifying viewport-border region extended to handle varying t/l/d/r
	* Support for live migration between connection points
	* Extended the number of RESET states to account for server crash recovery


	* image loading and guard thread stack size and safety edge condition fixes
	* allow shmif- connections to negotiate deviating audio samplerate


	* Added optional tesseract-ocr support to encode frameserver.
	* Removed resamplers from game
	* Terminal: mouse protocol support, better resize filtering, better scrolling step size
	controls, fixed font descriptor leak, OSC set title and bracket paste support


	* Support for egl-dri on BSDs
	* Input platform for FreeBSD/console
	* Display mapping semantics improved for SDL/egl-dri
	* Improved synch- control for multiple displays
	* linux/event, renamed to evdev, better (but still not good) VT switching support
	* evdev, MT event formatting fixes
	* evdev, better recovery in the event of SIGTERM


	* sdl12 hijack library reworked to use dummy- drivers for A/V
	* xlib hijack library for partially broken SDL12/SDL2 games that rely on dangling
	  X/GLX symbols



	* New functions: net_discover, video_synchronization, resize_video_canvas,
	video_displaydscr, video_displaymodes, map_video_display, system_identstr,
	system_collapse, switch_appl, build_pointcloud, image_state,
	cursor_setstorage, cursor_position, move_cursor, nudge_cursor,
	resize_cursor, image_mipmap, alloc_surface, tag_image_transform,
	resample_image, target_reject, target_updatehandler, pacify_target,
	bond_target, rendertarget_detach, rendertarget_forceupdate,
	rendertarget_noclear, target_flags, target_parent, target_displayhint,
	target_fonthint, target_alloc, open_nonblock, accept_target,
	define_feedtarget, define_nulltarget, util:hash, util:to_base64,
	util:from_base64, get_keys, match_keys, list_target_tags,
	target_configurations, audio_buffer_size, crop_image, center_image,
	image_access_storage, image_resize_storage, image_matchstorage,
	build_pointcloud, system_defaultfont, frameserver_debugstall,
	input_capabilities, input_samplebase, set_context_attachment,
	video_display_state, shader_ugroup

	* Removed deprecated: launch_target_capabilities, game_cmdline,
	switch_theme, list_games, game_info, game_family, game_genres pause_audio,
	instance_image, camtaghmd_model, default_movie_queueopts,
	default_movie_queueopts_override, net_refresh


* Calctarget callback table get, histogram_impose and frequency
* Frameserver_terminated events renamed to terminated
* Support for coverage tracking trace build
* Added color support to output messages
* Added interpolation function specifier to move/rotate/blend/resize
	* Transformation chains can have callback tags associated with completion,
		this also works as a timer implementation.
	* Added support for native/accelerated cursor rendering
* System_collapse for switching running appl or dropping all resource
* Allocations that are not strictly connected to frameservers
* _display_state callback
* Input class for frameserver/remoting originated input (cursor_input, key_input)
* Net discovery events propagated
* Automated frameserver- looping dropped,
  in favour of manual management on terminated events
* Monitor state format properly escape Lua strings
	* Text rendering functions provide additional metrics and has a tabled
		version where %2 indices ignore format string characters
* Link_image can now specify anchor point


* Database module rewritten, target/configuration/appl key-value store
* Namespace rewritten, RESOURCE/APPL split into multiple fine-grained namespaces
* Interpolation state exposed as shader built-in
* Output dimensions exposed as shader built-in
* Better transformation caching and dirty invalidation
* Bugfixes to 2D/3D picking
* Support for post- Lua init hook scripts (primarily intended for testing and
  automation purposes).
* First refactoring of memory allocation resources using different
  interface that tracks alignment, metatype etc.
* Support for adoption / fallback application in the event of an
  error in the Lua state machine
* Dropped support for framequeues
	* Font rendering support for default- system font and specifying format
	  related to system font
	* Fallback font chains to switch other fonts when glyphs are missing
	* Cheap, "shallow" clipping added to reduce stencil- buffer use
	* More fine grained control over frameserver data routing
	* Support for shader instancing through uniform groups
	* Framesets now act as null_surface + sharestorage calls


* EGL-GLES split into regular EGL-GLES primarily for
  ARM devices, and the Linux/KMS specific EGL-DRI with the distant
		relative EGL-NVIDIA.
* Interface expanded to support multi-monitor, dynamic synchronization switching
* X11 and Linux (evdev) platform support expanded with better input management
* Support for DRI render-nodes, accelerated buffering passing
* OpenGL used stripped from video/3d/frameserver
  into AGP (arcan graphics platform) to support lower level graphics APIs
  and software rendering.


* Much improved documentation, automated testing, build tracking and tagging.
* Re-organized large parts of the source tree
* Switched majority of component licensing from GPL to BSD
	* AWB / Gridle moved out to own .gits, defunct/unsupported
	* Added support for LWA, lightweight arcan. A special build that uses
		another arcan instance as display server.
	* Much improved support for HDPI and mixed-DPI displays


* Support for non-authoritative connections via CONNPATH and CONNKEY
* Support for multiple- segments,
* More aggressive cookie/dynamic integrity check
* Cleanup / simplify connection and setup API
* Shmif resize heuristics switched to reduce stalls / latency
	* Support for multiple video buffers / segment
	* Support for multiple audio buffers / segment
	* Support for Communicating buffer dimensions
	* More fine-grained control over I/O multiplexation, guard threads,
	  synchronization, blocking vs tearing
	* Type-model changes, SEGID can register as: LWA, NETWORK_SERVER,
	* target_command- changes: -FDTRANSFER, +BCHUNK_IN, +BCHUNK_OUT,
	* external_command- changes: +FAILURE, +BUFFERSTREAM, +STATESIZE, +FLUSHAUD,


* Added terminal frameserver
* ARCAN_FRAMESERVER_DEBUGSTALL switched to allow infinite or specific- sleep
* VNC server support added to encode
* Remoting frameserver added (primitive at the moment, support vnc client)
* Decode_ default switched from av/ffmpeg to libvlc
* Libretro graphing moved to a possible debug secondary segment



  • Monitoring mode now uses the same namespace as themes, can now load .lua crashdumps
  • The core-engine builds and runs on arm/egl devices (e.g. raspberry PI), no working input layer or resolution switching controls yet. _math performance is horrible before we get working ARMv6 + NEON optimized options.
  • Frameserver API cleaned up, reworked build-system and source organisation.
  • Optional avfeed- frameserver added, this is just a skeleton to ease writing custom data sources ( corresponding lua calls are launch_avfeed) and needs to be enabled build-time.
  • Frameservers can now (except on windows) be built in a split- mode, where each subtype (movie, encode, libretro etc.) gets its own binary.
  • Alignment issues when running SIMD optimized math adjusted
  • OSX support partially re-added, no packaging / UI work as of yet.
  • Monitoring mode changed slightly, instead of forking, we now set envvar and re-exec ourselves to accommodate for systems with broken broken fork() support (seriously OSX...)


  • initial API documentation coverage now at 100%, language and descriptive qualities for individual pages still have a lot to go, this will be improved gradually.
  • system_load now accepts an optional trigger to disable _fatal calls when asked to load a broken script
  • target_coreopt added to force key,val options to target frameserver
  • target_verbose hints frameservers and their internal processing to expose more detailed data (e.g. pts/framecount/frameskipping for decode and encode)
  • define_calctarget added, similar in style to a recordtarget (without any audio) that exposes buffer data as a callback to a provided lua function
  • target_synchronous disables PTS enforcement and blocks on sync with frameserver and with GPU (only for very specific uses)
  • exposing lua api to the VM is delayed until just before the themename() entry-point
  • all C<->LUA functions are now mapped to a LUA_TRACE(luasymbolname) macro (where ctx refers to the lua_State pointer) for engine dev. to ease customized tracing, by default, the macro is just empty.
  • system_snapshot function added (similar to a crashdump but can be invoked by script dev.)
  • image_children now returns correct VIDs
  • more functions aggressively shut down if a broken VID is provided


  • Support for Core Options
  • Support for 3D Cores (may cause some problems with certain window managers as we need to spawn full windows to get access to an off-screen FBO)
  • Improved support for analog devices and filtering
  • Rollback based input latency masking support added (experimental)

Database tool

  • Improved builddb times and fixes for libretro core scanning
  • Now adds support for .descr files in games/target folder to disable and override scanning
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.