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.
Alternative:
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 vtkRenderWindow::StereoRenderComplete()
.
Maybe in a default path inside vtkRenderWindow::StereoRenderComplete()
, call vtkOpenGLRenderWindow::GetPixelData(..)
to fill in vtkOpenGLRenderWindow::ResultFrame
and break away. This will ensure vtkOpenGLRenderWindow::ResultFrame
is populated. From then on, vtkOpenGLRenderWindow::DrawPixels will initialize vtkOpenGLRenderWindow::DrawPixelsTextureObject
.
DearImGUI Gallery thread
Edit: update links
Edit: Add a link to DearImGui gallery post