Both Prism and Glass provide a top-level API and rely on specific implementations. On desktop, the specific implementations do not require properties to be set, as the defaults are obtained from properties like " os.name" etc. However, they can be overruled.
On embedded, it is more likely that users have to specify the properties. For example, on the Raspberry Pi one would typically use -Dembedded=monocle -Dglass.platform=Monocle (note the lowercase monocle versus Monocle) Currently, there are inconsistencies in how the properties for Glass and Prism are obtained. Prism: the base class for determining properties is com.sun.javafx.PlatformUtil, in the javafx.base module. A property named "embeddedType" is used to determine which native library to load (e.g. prism_es2_monocle) and to determine which GLFactory has to be used (e.g. com.sun.prism.es2.X11GLFactory). Glass: the base class for determining properties is com.sun.glass.ui.Platform, in the javafx.graphics module. The return value of determinePlatform() (which can be macosx, windows, linux, gtk, ios or anything user-specified defined via a property named "glass.platform" e.g. Monocle) is used to determine which class implements the PlatformFactory (e.g. com.sun.glass.ui.monocle.MonoclePlatformFactory). While Glass and Prism are clearly 2 different things, I think the properties that ultimately decides which factories and native libs to be loaded could belong in the same module (instead of javafx.base AND javafx.graphics) Further, I think it would be good to be more consistent in the naming and use for example "prism.platform" . Thoughts, - Johan