Skip to content

Releases: letoram/arcan

Arcan 0.5.4 - System Graphics focus continues

29 Dec 20:06
Compare
Choose a tag to compare
(build) version bump

FossilOrigin-Name: 0f8577eb2d1c0e592e4060b8cc94cdea1b2493154802f84e9c548dc6ea63af4d

going deeper into the abyss

29 May 14:26
Compare
Choose a tag to compare

Engine

  • 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

Shmif

  • 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

Platform

  • 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.

Terminal

  • 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

Lua

  • 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 constants: TARGET_ALLOW(CM,LODEF,HDR,VECTOR,INPUT)
  • 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")

LWA

  • 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

going public

11 Apr 19:09
Compare
Choose a tag to compare

This is by far the largest release to date, covering about two years of development when combined with the two other appls senseye and durden. In addition to a number of bugfixes, optimization and refactoring, these are the biggest changes:

General

  • 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

Lua

  • 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
  • New constants: GL_VERSION, SHADER_LANGUAGE, FRAMESERVER_MODES, APPLID,
    API_ENGINE_BUILD KEY_CONFIG, KEY_TARGET, HINT_FIT, HINT_CROP, HINT_YFLIP,
    HINT_ROTATE_CW_90, HINT_ROTATE_CCW_90, SHARED_RESOURCE, SYS_APPL_RESOURCE,
    ALL_RESOURCES, INTERP_LINEAR, INTERP_SINE, INTERP_EXPIN, INTERP_EXPOUT,
    INTERP_EXPINOUT, ANCHOR_UL, ANCHOR_UR, ANCHOR_LL, ANCHOR_LR, ANCHOR_C,
    VRES_AUTORES, EXIT_SUCCESS, EXIT_FAILURE, MAX_TARGETW, MAX_TARGETH,
    TYPE_FRAMESERVER, TYPE_3DOBJECT, TARGET_SYNCHRONOUS, TARGET_NOALPHA,
    TARGET_VSTORE_SYNCH, TARGET_VERBOSE, TARGET_AUTOCLOCK,
    TARGET_NOBUFFERPASS, DISPLAY_STANDBY, DISPLAY_OFF, DISPLAY_SUSPEND,
    DISPLAY_ON, RENDERTARGET_NOSCALE, RENDERTARGET_SCALE, READBACK_MANUAL,
    HISTOGRAM_SPLIT, HISTOGRAM_MERGE, HISTOGRAM_NOALPHA, TD_HINT_CONTINUED,
    TD_HINT_INVISIBLE, TD_HINT_UNFOCUSED, TD_HINT_IGNORE, FONT_PT_SZ,
    CRASH_SOURCE
  • 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

Engine

  • 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

Platform

  • 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.

Shmif

  • 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, NETWORK_CLIENT, MEDIA, TERMINAL, REMOTING, ENCODER, SENSOR, GAME, APPLICATION, BROWSER, VM, HMD_SBS, HMD_L, HMD_R, POPUP, ICON, TITLEBAR, CURSOR, ACCESSIBILITY, CLIPBOARD, CLIPBOARD_PASTE
  • target_command- changes: -FDTRANSFER, +BCHUNK_IN, +BCHUNK_OUT, +SEEKCONTENT, +DISPLAYHINT, +STREAMSET, +MESSAGE, +FONTHINT, +GEOHINT
  • external_command- changes: +FAILURE, +BUFFERSTREAM, +STATESIZE, +FLUSHAUD, +SEGREQ, +KEYINPUT, +CURSORINPUT, +CURSORHINT, +VIEWPORT, +CONTENT, +LABELHINT, +REGISTER, +ALERT, +CLOCKREQ

Frameservers

  • 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

Arcan 0.4.0

08 Mar 16:18
Compare
Choose a tag to compare

General changes

  • 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...)

LUA API changes

  • 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

Libretro frameserver

  • 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

Arcan 0.3.1

15 Nov 00:16
Compare
Choose a tag to compare

Download links at the bottom

Lots of changes this time around, while Gridle and associated themes (remote, streamer, ...) hasn't received much in terms of direct updates, they have benefited from several major engine revisions.

Biggest change is the addition of the Desktop oriented theme AWB (~10k LOC). Excluding mame-keybinding generation, it should have more functions and features than gridle already. Feedback appreciated!.

Brief changelog:
LUA

Can now be built using luajit-2.0 instead of regular lua5.1, workaround hacks for tonumber/tostring compatibility issues where 

[modified functions]
image_texfilter (terminate on invalid filter specifier)
image_clip_on (can now take clipping type specifier)
hide_image, blend_image, show_image, order_image, 
move_image, nudge_image all accept n-indexed tables of vids as first argument as well.
image_tracetag (vid only argument returns current tag)
build_shader (now accepts nil as vertex or fragment and assumes built-in default)
camtag (can now set near, far, fov, aspect, facing), camtag object scale affects output (-1 flips vertical))
game_info (can now grab table by ID and not just title)

[new functions]
attrtag_model (switch 3dmodel transform state, e.g. infinite- distance models)
target_seek (seek absolute or relative in decoding frameservers)
recordtarget_gain (set mixing properties for an audio source in a recordtarget)
inputanalog_filter (set low-level analog device input filtering)
inputanalog_query (get current dev/axis filtering state)
inputanalog_toggle (mass disable/enable all analog input processing)
benchmark_data (copy the current benchmark ring-buffer)
benchmark_enable (toggle gathering of benchmarking data)
benchmark_timestamp (get system clock time in millis)
forward3d_model (push the model along its current forward facing vector)
strafe3d_model (push the model along the vector perpendicular to up and forward)
image_sharestorage (discard the storage of the dst object and replace it with a reference to src)
null_image (create an object without a GL storage attached, useful as property masters and anchors)
color_image (create an object without a GL storage and uses a single-color shader without samplers)
storepush_video_context, storepop_video_context (allocate a new object, store the visible output of this context into the new object and push/pop the rest, returning a handle to the new object)
image_inherit_order (set order value to be relative to parent)
frame_pulse entry-point added (only tested for once and disabled if not found)

[new "debug build" only functions]
freeze_image (trap as soon as image state is modified after this has been set)

[new reserved functions]
 clipboard_getmsg, camtaghmd_model

Core

  • Refactored out most OS / Platform specific stuff into platforms/*
  • SDL_Image made optional, using libpng for screenshot/image loading.
  • SDL_TTF requirement dropped, using freetype with a simplified sdl_ttf version in-source for now (more refactoring will happen here).
  • Picking- group functions can now have their order reversed.
  • Broken math in picking functions fixed.
  • Video- pipeline state serialization (for debugging, crashlogs etc).
  • LodePNG for screenshots dropped.
  • Monitor mode (linux/BSD only currently) added, where on arcan session can sample the state of another.
  • Internal streaming audio playback dropped and replaced with decode frameserver entirely.
  • Individual resource loading switched to an internal resource mapping API to fit better with the platform split.
  • Reference counted GL storage decoupled from video object, allows storage to be shared (in preparation for sprite sheets and to circumvent restrictions in instance_ and linking).
  • Frame generation times, logic update times and frame syncronization times now tracked for benchmarking.
  • Switched db default fsynch on write to be off (performance boost, but may introduce corruption side-cases, monitor for future changes).
  • Debug option to dump textures as PNG on upload.
  • Hierarchical pick fix to take resolved rather than local opacity when selecting.
  • Re-added the aggressive "dupm stack and die" for getvid in debug builds.
  • Notable 2D pipeline optimization work; transformations chain resolves are cached, transformation matrixes as well, most expensive operations being being replaced with SIMD versions.
  • Default- oriented 2D objects gets a cheaper renderpath and simplified picking costs.
  • Instances can no-longer be linked to or be part of framesets, use null_images instead.
  • 3D pipeline simplified to reflect camtag changes, still missing render-to-cubemap though.
  • 3D pipeline now supports infinite distance objects (e.g. skyboxes)
  • Math, added basic frustum tests and quat_matr -> view vector extraction
  • Renderbuffers vs Framebuffer confusion problems fixed.
  • FBO internal resdolution can now be set to higher than output display resolution.
  • Begun closing down traversal options (still possible in some places)
  • Framequeue decoding timing etc. reworked (again, doubt there's a good possible universal solution).
  • Framequeue cleanups (still horrible though).
  • Skewing pitch support dropped in audio (should have effect approach reworked anyhow).

Misc

  • Mouse- handling support script added (with mouse gestures etc.).
  • LUA interface mapping method switched, work on automated API documentation/test/example generation (see doc/*) begun, about 80% coverage.
  • Win32 got a new tool, ArcanLauncher which helps with setting launch arguments and DB scraping.
  • Build- system refactored into platform/*
  • out-of-tree building fixes
  • SQLite3 can now be built-in using the amalgamation (external/sqlite3)
  • LUA debug.debug gets patched to unlock mouse on trigger
  • Frameserver decode now encodes FFT in video channel for audio only playback.
  • Seeking added to frameserver decode.