glspectrum: use shader-based pipeline instead of fixed function pipeline
glspectrum is currently using immediate GPU commands (glBegin/glEnd) which is legacy and unsupported in modern OpenGL contexts. Refactor the code to use a shader-based pipeline compatible with the core profile instead.