User interface that plays nice with Cinder drawing calls

Hi!
I’m in the process of developing an application using Cinder with a lot of user interface elements. I’ve tried many UI blocks, and most work quite well, but I’ve come across an issue that seems to plague most if not all UI frameworks; once you use a UI framework, you loose the ability to use Cinder’s draw functionality. I understand why this is; the framework has its own drawing routines and draws itself and all nodes/elements of the framework that make up the UI. Those elements draw themselves and in some cases you can use Cinder’s gl::draw*() calls, but often you can’t. Often you’re trapped within the UI framework (as far as I’ve seen).

To elaborate and give some examples:
ImGUI you can use Cinder’s draw commands via custom drawing routines
NanoVG drawing is done via it’s own vector calls, loading textures must be done via NanoVG, does not play well with Cinder’s draw calls (e.g. texture manipulation)
poScene fully possible to use Cinder’s draw commands here, but it lacks UI elements

My question is:
Are there any UI frameworks that play well with Cinder’s draw calls in such a way that I can use Cinder’s draw calls in combination with the UI framework, and be able to use Cinder’s Texture/Shader/Vbo/Vao stuff?

I would like to use poScene as the scene graph in combination with another framework which has a bunch of UI elements. Is this possible?

ImGui might be possible because I can control the rendering routines of each element. NanoVG is difficult with regard to textures I’ve seen because it uses it’s own drawing routines and texture loading (but it has many good looking UI elements). poScene is also well to control via Cinder, but it lacks all but two UI elements.

Thanks in advance!

Bastiaan de Jong

1 Like

I made one called Pretzel that uses cinder draw commands. Depending on what you’re trying to do, it might be a good place to start. Let me know if you have any specific questions or need help with it. https://github.com/cwhitney/PretzelGui

charlie

1 Like

I was just looking at the IMGUI class the other day. IMGUI does seem to use Cinder’s Texture/Shader/Vbo/Vao stuff but they do suggest that using custom textures on the GUI could potentially bog things down a bit. How did you get IMGUI to use Cinder’s draw commands via custom drawing routines? I was trying to get it to draw into an FBO but ended up referencing a fbo that I inserted into the IMGUI block. I think what you’re trying to do is fully possible with IMGUI but you might need to modify the library yourself to gain access to those elements as they might be private. That would also be great for setting up gui windows that have custom shaders embedded into them. I kinda gave up figuring things out when I got to IMGUI’s rendering process. It calls straight to the window and it was a little out of my knowledge scope.