I want to put a canvas or text in front of an openglsurface. However it seems that opengldurface is always on top?, anyone know a way around this.

Whatever you’re planning on doing with the Canvas, do it in OpenGL.
No need for overlapping, fewer moving parts, and likely it’d draw faster since it’d all be in one technology.

Have you gone through the steps toward determining if these issues are your implementation or a massive OpenGL issue that would affect hundreds of existing delivered products that don’t experience slow text drawing and a grain issue?

OpenGL is deprecated on the Mac, it still kinda works but Metal is the only 3D library going forwards.

You can use CALayers (Mac only) to overlay other elements onto a OpenGLSurface. Also OpenGL is not natively Retina ready and requires extra work to get it there. High Sierra broke it for a month or two.