add generic OpenGL buffer objects and specialisations for it; substitute these new types where appropriate