using CImGui
using CImGui.GLFWBackend
using CImGui.OpenGLBackend
using CImGui.GLFWBackend.GLFW
using CImGui.OpenGLBackend.ModernGL
using AbstractPlotting
using GLMakie
import GLMakie: make_context_current, render_frame, to_native, Screen
# add ImGui rendering pass to GLMakie's rendering loop
function imgui_renderloop(screen::Screen; framerate = 1/30, prerender = () -> nothing)
try
while isopen(screen)
# Somehow errors get sometimes ignored, so we at least print them here
try
t = time()
GLFW.PollEvents() # GLFW poll
# create new cimgui frame
ImGui_ImplOpenGL3_NewFrame()
ImGui_ImplGlfw_NewFrame(to_native(screen))
CImGui.NewFrame()
# create UIs
CImGui.ShowDemoWindow(Ref(true))
# produce GUI "meshes"
CImGui.Render()
prerender()
make_context_current(screen)
render_frame(screen)
# render imgui over plots
ImGui_ImplOpenGL3_RenderDrawData(CImGui.GetDrawData())
make_context_current(screen)
GLFW.SwapBuffers(to_native(screen))
diff = framerate - (time() - t)
if diff > 0
sleep(diff)
else # if we don't sleep, we need to yield explicitely
yield()
end
catch e
@error "Error in renderloop!" exception=e
rethrow(e)
end
end
catch e
@error "Error in renderloop!" exception=e
rethrow(e)
finally
destroy!(screen)
end
return
end
# init CImGui
ctx = CImGui.CreateContext()
CImGui.StyleColorsDark()
ImGui_ImplGlfw_InitForOpenGL(GLMakie.to_native(GLMakie.global_gl_screen()), true)
ImGui_ImplOpenGL3_Init(150)
# replace renderloop
GLMakie.opengl_renderloop[] = imgui_renderloop
x = rand(10);
y = rand(10);
colors = rand(10);
scene = scatter(x, y, color = colors)
Last active
April 16, 2022 03:46
-
-
Save Gnimuc/5a1e4942784cfc3558e2ee50b7bee84d to your computer and use it in GitHub Desktop.
Author
Gnimuc
commented
Aug 12, 2019
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment