Skip to content

Conversation

@dkargin
Copy link
Contributor

@dkargin dkargin commented Nov 27, 2017

I've made some work to separate simulation part from FLTK.

I've separated libstage to two separate libraries: libstage-core and libstage. libstage-core implements headless simulation, and now it contains no references to FLTK. libstage includes libstage-core and FLTK implementation for GUI.

There are also two variants of executables: 'legacy' stage and stage-headless. Legacy variant works the same, with -gui option. stage-headless can only be headless, without any GUI.

Things that I have refactored to make it work:

  • Canvas now wraps most rendering routines, instead of calling FLTK GL utilities. FLTK-specific routines are implemented in CanvasFLTK class.
  • Menu and option system. I've stripped GUI code from Option class. All menu-related things are localized in MenuManager class. FLTK part implements MenuManagerFLTK, that links to CanvasFLTK to populate a menu
  • All rendering methods get a pointer to active canvas. No need to keep a pointer to world class, just to obtain canvas pointer in rendering pipeline. It would help to implement multi canvas rendering as well.
  • Image loading is localized in Image class. It uses libpng to load images. I haven't seen non-png bitmaps in world folder. Though I can consider making a more complex management of image loaders, allowing FLTK-based stage version to register additional fltk image loader.

I've separated gui-specific code to libstage-gui library, so base simulation does not need fltk anymore.

Now stage compiles two executables: stage and stage-headless. Headless variant does not needs FLTK

Fixed most of compiler errors. Linker to be fixed
Introduced MenuManager class. It descendants should deal with adding options to actuial GUI implementation

All model drawing functions now get a pointer to Canvas instance. No more need to kep a pointer to world data just to get Canvas from it (after another dynamic_cast)

And many more cleaning as well

Code compiles now
Fixed image loading
Reworkrd World::Run a bit. Now there is separate WorldGui::Run for scenes with gui support
Old libstage with FLTK-GUI remains the same. Now there is libstage_core, that works without FLTK
Stripped Push/PopColor from Model class. Model often obtains direct pointer to canvas, so it can call this methods directly

Added explicit 'override' keywords for overriden methods. Now we strongly need c++11

Updated CMakeLists.txt and stage-config to properly install headers for GUI
All classes should use void DataVisualize(Camera *cam, Canvas* canvas) signature.
Seems like I've missed camera and blinkenlight during my fix.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant