Must OpenGL overlays be child components?

I noticed in the juce demo that DemoControlsOverlay is a child component of the OpenGL component (the target of the OpenGL context). And in my own code the overlay only renders if it is a child.

Do OpenGL overlays have to be child components?

If you mean "do they have to be child components, or could an overlapping sibling component also be used" then the answer is yes, they would need to be a child. Because the GL component is rendered in a completely different way to its parents, anything that just overlaps the GL component won't be drawn.