Structs

Represents data that needs to be created separately for each context, for example: Vertex Array Objects, Vertex Buffer Objects.

The one GlDevice contains data (programs) that can be shared between contexts. For unrelated contexts you need to create separate devices.