Na, man kann zum Beispiel vor dem Rendern alles nach Materialien sortieren, muss dann ein Material (inlusiv Textur) nur einmal setzen und kann dann alle Objekte die dieses Material benutzen hintereinander weg zeichnen.
Insgesamt ist Performance bei 3D Anwendungen ein sehr schweres Thema, es gibt sehr viele Faktoren, und vieles was vor ein paar Jahren als allgemeine Richtlinie galt, gilt heute schon längst nicht mehr.
Auf jeden Fall ist es falsch zu sagen "glGet ist das schlimmste was es gibt, das darf ich nie benutzen", oder ähnliches. Viele Richtlinien vereinfachen komplizierte Regeln, wenn man sie aber stur und ohne Verstand anwendet, schaden sie mehr, als sie bringen.
Ein 'Wrapper' für OpenGL ist zum Beispiel OpenSceneGraph, womit ich mich zufällig momentan beschäftige. Das löst das mit dem States und Texturen setzen recht elegant (wie ich finde), aber es ist natürlich auch ein riesiges Framework. Dort kann man ein State für ein Node setzen, er wird dann aktiviert, alle Objekte gezeichnet und dann deaktiviert, wodurch man also definiert "Dieser State gilt für diesen Node und alle Child Nodes".