自作ゲームのためにOpenGLをラップするクラス群を作っているんだが、
モデルビュー関係がシェーダー任せになると、クラス分けが今ひとつ変な感じになる…

とりあえず質感を決定するためにMaterialというクラスを作って、シェーダーはそっちが担当し、
頂点情報はVAOというクラスを作ってそっちにもたせることにした。
そうすると、描画する時は

material.bind(); // 質感を決める
vao.draw(); // そのシェーダーを使って描画する

という流れになる。これは直感的に問題ない。
でも、行列操作のためにはシェーダーのuniform変数を操作する必要があるわけで、
座標を司る行列関係のメソッドがMaterialの方に存在するという、ものすごく気持ち悪い実装になってしまった。