Programming anything non trivial in OpenGL that is intended to be used on a variety of GPU's in an efficient manner, is a royal pain in the butt. This is because of the black box that opengl provides. This makes things simpler but I'd rather deal with the complexity of the API, rather than "hope and prey" style programming that opengl accepts (encourages).