Hah, very interesting. Haven't had a chance to try it, but kudos for putting this together
it's completely halting the main thread while the console is visible.
Really? Unless you're on a Mac, it shouldn't do that. But since I don't know where you're calling JOptionPane from... ahh, I guess that would explain it. If the code displaying it ends up on the main loop somewhere (and it probably does), then I it'd hang there until it was done. So, never mind.
Try this out.
[EDIT]I'll try to hack a simpler version later; we really don't need GLSL to just draw a quad, lol. But if we can draw textured quads, using named textures already available through Starfarer, and can call the text glyph system to present text at X,Y, then we can build just about anything we'd want to do... right there, in the game, like anything else in the UI.[/EDIT]
Don't bother with shaders. Starfarer uses the fixed function pipeline, and the two are incompatible. Shaders are an all-or-nothing way of doing it - you can't only use them for some things.
If you're not familiar with OpenGL, I'd suggest being very careful. It's pretty easy to crash the graphics driver by doing some ill-advised OpenGL calls - which can mean a system hang / hard reboot.
Although, that's kind of a moot point. Since there are currently no callback from within the rendering portion of the loop, anything you try to draw would get cleared out before the start of the next frame's rendering - you'd never see it.
We can do the rest fairly easily, if we're already allowed to capture mouse-click events and keystrokes.
There's some potential for unintended interactions here, too (using Keyboard.poll() or Mouse.poll() would break the game).