gled/features

Distributed object spaces
  • a tree of servers and clients of any depth, with the same executable at every level, with a GUI or without one: any Gled application can run on a cluster
  • every node mirrors the object spaces of the nodes above it, exports its own to the nodes below, and keeps local objects for its own computation and rendering
  • method invocation requests are routed, broadcast and executed in the same order on every node; they can be synchronous, and return values
  • objects run their own threads, started and stopped by method calls from any node
  • authentication with public keys and access control by filter objects, for use across untrusted networks
  • the hierarchy itself is a graph of Gled objects, and is browsed and controlled like any other
C++ framework
  • object graphs: ZGlass is the base of all classes and holds named links to other objects, ZList and its subclasses are the containers; reference counting with back-references
  • the class header is the specification: directives in its comments generate the accessors, the remote method calls and the GUI
  • libsets add classes, with their GUI and renderers, to a running system
  • built on ROOT: streaming of object graphs to files and over the network, introspection, and cling, the C++ interpreter, for macros and interactive use
  • ROOT's graphics, canvases and histograms included, also through ROOT's web display
  • GNU/Linux, GCC, ROOT 6, C++20
GUI
  • FLTK widgets for every exported data member, method and link, following the C++ inheritance
  • a browser of object graphs, with editing and drag-and-drop
  • context menus to create objects and to build and send method calls, to local or remote objects
  • application GUIs assembled from objects (MetaGUI)
  • zoomable fonts and widgets
Rendering
  • each class has its own OpenGL renderer class, separate from the object; scene traversal is programmable and allows multi-pass rendering
  • materials, lights, blending and the light model are modifier objects in the scene graph
  • GLSL shaders, offscreen rendering into frame-buffer objects, stereo
  • textured shapes, terrains and triangle meshes; text with FTGL
  • the viewer, the Pupil: picking, camera control, context menus, and frame dumps for movies
  • ROOT geometries, with overlap checking