MinimalUI glNext Rewrite - nselikoff/Cinder-MinimalUI GitHub Wiki

The main purposes of this block:

  • provide a "customer facing" UI (i.e. the target user is the end user of the app first, the developer second), specifically for our two existing apps, Beautiful Chaos and Reymenta
  • create a beautiful and minimal UI that looks like it had a "designer's touch" versus a UI that looks more like a debug tool
  • create a UI that works equally well with a mouse (and possibly keyboard) as with a touch screen, and is resolution independent (e.g. will work on retina screens... which it currently does)
  • create a UI that has a minimal performance impact for apps that are graphically demanding (like Beautiful Chaos and Reymenta)

glNext

  • upgrade to work with Cinder glNext

Configuration

  • support external definition of UI via XML, JSON, LUA or something else. need to decide whether to just allow creation and placement via external scripts, or also more dynamic runtime elements like registering callbacks to buttons
  • convention over configuration in layout algorithm - make sure it makes sense for most general case, then customize for something like Beautiful Chaos. fix any aspects of the auto-layout that are too specific to the block's roots in Beautiful Chaos (i.e. make it hard for other people to use)
  • each UI element should have a OSC id out of the box, and be compatible with a MIDI message, and also compatible with a node.js implementation

Performance/Rendering

  • rewrite drawing code for modern opengl (use VBOs and shaders instead of immediate mode gl calls)
    • gl::draw(texture)
    • drawStrokedRect, drawSolidRect, drawStrokedCircle, drawSolidCircle, drawSphere, drawLine, etc
  • be smart about when to redraw. only redraw parts of the UI that have changed, and only redraw those at a reasonable rate (e.g. 12-25fps)
  • profile the existing block so we have something to compare to and know if we're actually gaining performance (done: Bruce)
  • make sure performance is good on multi-window apps

Documentation

  • add documentation, example screenshots and samples so other people can more easily decide if they want to use it / check it out

Other

  • consider refactoring UIController into a few subclasses for full height left aligned, specified or auto height left aligned, and centered (w & h required)
  • Look at what's happening in UIController instantiation... too much. Not every UIController should load fonts, use a huge FBO, etc.
  • use hasParam/getParam
  • add support for lambdas on buttons
  • Clean up use of DEFAULT vals
  • How to share things like addCallback between various buttons and sliders... almost like a "trait"?
  • derived *Ref typedefs should clean up need for casting
  • add a vec3/quat control
  • check out Bruce's FboPanel
  • consider adding keyboard configuration and control
  • it seems every FBO has a size of 2048x2048, could it match the exact size to save GPU memory?