PUI
FlightGear Frontends |
---|
Startup |
Internal
|
External
|
PUI is the standard GUI engine used in FlightGear, it is part of PLIB and is using raw, fixed-pipeline, OpenGL code internally (no OpenSceneGraph). PUI provides a fairly basic, but robust, set of widgets. PUI is also used for rendering the Menubar:
In FlightGear, PUI dialogs are standard PropertyList XML Files that are stored in $FG_ROOT/gui/dialogs, they can contain the widgets mentioned in $FG_ROOT/Docs/README.gui, using a simple layout engine discussed in $FG_ROOT/Docs/README.layout, and bindings using a combination of so called fgcommands (see $FG_ROOT/Docs/README.commands) and custom Nasal code. In addition, each PUI/XML dialog may contain Nasal sections that are executed when opening/closing the dialog, a feature which is commonly used for procedurally creating/updating widgets using the cmdarg() API, which allows the dialog tree to be traversed and manipulated prior to the dialog being rendered.
PUI/XML dialogs can be loaded, updated and closed using a handful of fgcommands:
- dialog-show
- dialog-update
- dialog-apply
- dialog-close
PUI related OpenGL code is particularly infamous for causing rendering artifacts for people on AMD/ATI and Intel hardware (especially in combination with certain styles and effects/shaders).
PUI is also known to affect rendering performance quite significantly, while also preventing FlightGear from using a more recent version of OpenGL[1][2].
In addition, OpenSceneGraph (OSG) can obviously not help optimize any PUI related GL code and PUI widgets are generally considered to be pretty archaic and not easy to extend[3][4][5].
Note We use the GUI code from PLIB, which doesn't know anything about OSG. See the SGPuDrawable class in $FG_SRC/Viewer/renderer.cxx for the implementation. The one catch is that OSG has a strong notion of separation between the update of a "scene" and its rendering, and that might not play well with arbitrary existing OpenGL code. |
For these reasons, we're hoping to phase out PUI in FlightGear.
As of late 2015, there is heavy activity towards providing alternatives to a PUI-based UI:
- Integrated Web GUI (external, browser-based - fully asynchronous)
- Howto:Processing legacy PUI dialogs using Canvas (internal, using the Canvas system and a simple Nasal parser to deal with existing PUI/XML dialogs)
Screenshot showing Phi
Screenshot showing a dialog rendered by the pui2canvas parser
- ↑ http://sourceforge.net/p/flightgear/mailman/message/34532040/
- ↑ http://forum.flightgear.org/viewtopic.php?f=71&t=24046
- ↑ http://sourceforge.net/p/flightgear/mailman/message/26832164/
- ↑ http://sourceforge.net/p/flightgear/mailman/message/10587120/
- ↑ http://sourceforge.net/p/flightgear/mailman/message/10587272/