I made this post to help ImGui/3rd party UI users who wish to display VTK content in an externally provided context(glad/glbindings/…) and (or) windowing system (glfw/…) or DearImGUI, Nuklear, etc.
So far, there is only one post which discusses procedures to render VTK into user provided frame buffer. It is quite outdated and does not function for VTK >= 9.0, probably since much of VTK’s OpenGL code base has changed.
I’ve updated a fork of the repo to conform with imgui_impl_xxx.h files and vtkGenericOpenGLRenderWindow. It is a straight forward usage for DearImGUI users, but not the case for VTK users.
It would be easier to have a class vtkDearImGuiVport; sub-class
vtkGenericOpenGLRenderWindow. In an override to
vtkGenericOpenGLRenderWindow::Frame(), access texture id from
vtkOpenGLRenderWindow::DrawPixelsTextureObject and pipe it to ImGui::Image(…). This would remove the additional render FBO to texture done in the current repo. But a huge problem arises when StereoRender is off since the internal texture object is not filled in
Maybe in a default path inside
vtkOpenGLRenderWindow::GetPixelData(..) to fill in
vtkOpenGLRenderWindow::ResultFrame and break away. This will ensure
vtkOpenGLRenderWindow::ResultFrame is populated. From then on, vtkOpenGLRenderWindow::DrawPixels will initialize
DearImGUI Gallery thread
Edit: update links
Edit: Add a link to DearImGui gallery post