The question is a little bit vague and philosophical, im not sure it belongs to this website model, but here goes my opinion.
I would go with the first option, its my favourite way for the following reasons:
The drawable object should not be able to know everything about how to draw itself, instead, a global(or not so global) renderer should be used as a dependency for all drawables, to influence how they are drawn.
If a drawable only has geometry data in its raw form, that allows global configurations in the renderer to influence all geometry, instead of changing all one by one. Also it may allow optimizations that would be otherwise impossible, if all geometry and draw code was hidden behind each drawable.
One example that comes to mind would be the ability to batch all geometry that uses a same texture, and have it draw as fast as it possible, with less state changes.
Sorry for the possible incorrectness, my sleepiness is winning , cheers