Hi,
I am trying to visualize a simulation live in makie.
However my plot is not updated in VSCode when the observable it depends on is changed. The following is my code:
function getStickPositions(c::Config)
unitVectorAlongStick=[cos(c.ϕ),sin(c.ϕ)];
leftPos=c.Rg-l/2*unitVectorAlongStick;
rightPos=c.Rg+l/2*unitVectorAlongStick;
return [[leftPos[1],rightPos[1]],[leftPos[2],rightPos[2]]]
end
currentConfig=Node(Config([0,1],0.1,[0,0],0));
fig=CairoMakie.Figure()
axis=Axis(fig[1, 1])
xlims!(axis,(-3,3))
ylims!(axis,(-1,3))
axis.aspect=DataAspect()
xPosObs=lift(c->getStickPositions(c)[1],currentConfig)
yPosObs=lift(c->getStickPositions(c)[2],currentConfig)
#drawConfig(fig,currentConfig)
Makie.lines!(axis,xPosObs,yPosObs)
display(fig)
fps = 20
nframes = 120
for i=1:nframes
currentConfig[]=updateConfig(currentConfig[],1/fps)
sleep(1/fps)
end
A “Config” is a state in the simulation which can be drawn. “updateConfig” implements the update logic for the simulation.
Once I type “fig” in the terminal, the correct figure is plotted again. However the existing is not updated when the observable it depends on changes.
What’s going wring here?
Cairomakie makes static pngs or svgs that are then shown in the vscode plot pane. Changing an observable updates the relevant axis / figure state but it neither causes a new representation of the figure to be shown, nor is the CairoMakie output in any way backlinked to the figure. The backends that can update displayed figures are GLMakie and WGLMakie. Glmakie uses native windows, wglmakie can be embedded in web contexts, so it should in principle also work in VSCode. But it’s the least polished of the three backends currently
Maybe google around for that one, I’m not a Linux user, sorry. It seems to me that I’ve seen similar things quite often, there’s some libc issue I think or sometimes graphics driver issues.
I am facing the same problem on ubuntu 22.04. On the Makie homepage I was not able to find advice
I am hesitating to follow the instructions from this site: A Beginner’s Guide to Setup OpenGL in Linux
Is there some official advice to handle this issue?
Maybe for someone more skilled than me. What kind of information do you consider valuable on this link for Julia users on an Ubuntu machine using VScode?
Your problem earlier was GLFW not finding OpenGL. The error message suggested lack of either hardware or drivers. The glxinfo would tell you whether there’s an OpenGL available and what it’s version is. The version may be to low, so a driver update may be necessary. Or it might be due to discrete graphics vs CPU graphics, the latter of which used to support only lower versions of OpenGL. In that case you might need to update the configuration of which hardware each process uses. Or it might tell you there’s no OpenGL at all. In that case, if you know that you should have the hardware, then you should look for installing the necessary driver for OpenGL support.
Thanks for your answer! - I still do not know how to cure the issue under VScode after the reading
of this thread.
I have the impression that this is simply a bug. The package GLFW.jl shows similar problems.
The trouble maker is the library libstdc++.so.6. The way I see it, is: During the installation a wrong version of this file is installed.
This info is on the Makie README, I wonder if it is useful for your case. Do you have AMD graphiscs?
If you’re using an AMD or Intel gpu on linux, you may run into GLFW#198. A potential fix is then to delete libstdc++.so.6. An example path to this file on a system using juliaup and version 1.8.2 is /home/username/.julia/juliaup/julia-1.8.2+0.x64/lib/julia/libstdc++.so.6.