I see that Gonzalo has already responded - he'll have good insights... But you might need to give us more insight to what you are doing though, so that we know what to suggest.
Some other random questions and observations from me:
You say that "the same app in gtk3 performs well in software rendering" - can you clarify this, please? What is the gtk3 version doing? Is it also using GL, or is it doing "simple" drawing?
From the sound of things, I'm guessing the gtk3 version is NOT using GL but is doing "simple" drawing - in which case using the FLTK 2D API directly may work for you.
Or you can try Cairo.
Now, I'm not a huge fan of Cairo, but it does a good job of drawing things, and if you do not have accelerated GL support in h/w then Cairo may well be faster.
Probably worth a try, anyway.
The GL rendering in VBox can be very sluggish in my experience (and also in WSL2, FWIW - for the most part I'm using WSL2 rather than VBox for "linux on windows" things these days, and it mostly works...)
Some drivers will allow VBox (and possibly WSL2) to more directly access the GPU and thus get accelerated performance, so that might be worth looking into. (And ISTR that VMWare had accelerated GL accessible in their VM's for example, though I don't have any VMWare images now...)
However, I don't think the GL rendering should be _that_ laggy, so there _might_ be something less than ideal about how you are drawing things - maybe you can show us more about how you are deriving your window from FL_GL_Window, and what your draw() method looks like, etc.?