experiment with makeCurrent
explicitly core
add a ShaderException type to avoid "user error" noise