This is always a tricky one, and i’ve been tinkering with various methods for a while now. You’re trying to decouple your rendering and game logic, yes?
First off, the standard method nicked from normal J2D rendering is some kind of .paint(Graphics) method, which works nice since you can wrap up animation etc. in its own class and just have it display its current frame in the paint method. While this is slightly possible in a OpenGL driven game, its not even close to efficiant, and as soon as you start on anything more complicated you end up tearing your hair out with GL state problems…
You end up having to take your abstraction to a higher level - instead of your player/enemy/whatever game objects having a draw method, let these hold on to some kind of Sprite or Mesh class (with whatever material/texture/shader set of state that you need). Then these Mesh objects are held by some kind of renderer object which is in charge of drawing them all. Add some sort of camera object and you’ve got everything you need to draw a frame.
If you look at that again, you’ll realise that you’ve effectivly created your own simple scene graph - a scene consisting of Meshes and Materials, in some sort of collection along with the camera. Your renderer deals with the low level details of turning this abstract representation into an actual image on screen.
This leaves your renderer is free to do all the funky stuff it needs like state sorting on Materials, view culling, building geometry lists from Mesh objects etc. and the rest of your app just has to poke objects into a scene graph and not have to worry about it ;D
Hope that gives you some ideas at least 