Grundsätzlich sollte man sowas weitestgehend vermeiden.
Mach es ruhig erstmal für jedes Quad (oder auch 3D Geometrie), das wird erstmal nicht stören.
Später kann man Instanzen gleicher Objekte sowieso besser instanziert rendern, dann hast du keine Bufferwechsel und auch keine Texturwechsel. Je weniger desto schneller.
Für unsere Zwecke (gerade 2D) ist das aber alles eigentlich auch irrelevant. Wann hat man schon > 1000 Sprites im Bild?
Wenn es um Grafikperformance geht ist die Devise eigentlich immer: möglichst wenig Kommunikation mit der Grafikkarte.
Wenn du weißt das deine 1000 Quads die gleiche Textur haben kannst du diese natürlich besser außerhalb binden, also dort wo ich auch meine Buffer binde. Nach der for Schleife dann das unbind().
Den Shader solltest du nur einmal binden, der macht ja für alle das gleiche (sollte er zumindest).
Falls dich das übrigens verwirrt kannst du immer in die Klasse gucken, dort siehst du dann in den Methoden welche GL Funktionen ich aufrufe. Ich habs teilweise selbst schon wieder verlernt weil ichs abstrahiert habe
Aktueller branch ist "light", ich änder häufiger Kleinkram in den Klassen... also evt. immer beim aktuellen gucken.