The Daydream libs are a warpper of OpenGL API. And it also provide methods to manage resources(k-v like database), construct UI(In Qt like API), use Signal and slots system, use log system, etc. I also used this lib build a Small Engine. This project is a part of Computer Graphics lecture's Final project. It aims to implement various algorithms for convenient purpose, so it is not quite robustness from engineering perspective.
There are 4 basic parts of daydream: UI, Core, Renderer and Event. The patterns/organization of those libs and how to use them are illustrate below.
This lib is dynamic libs by default, and this lib is relies on Core, Render, Event.
The UI lib is quite small and easily to use. There are 3 abstracts contained in this lib: Widget, Layer and Window.
The Window abstraction will maintain the glfw's contexture. And using ImGui as the ui backend. All applications build by this lib should use Window abstraction first.
Window will organize all Layers belong to it. And it is responsible for call the Layers' render and update functions by sequential.
The Layer abstraction is a container of all widget, and a layer works like a sub-docker window in the application(or to say, MainWindow).