Le moyen ultime et le plus rapide serait d'avoir un tableau de textures (normales ou cubes). Récupérez ensuite dynamiquement la tranche de texture en fonction d'un identifiant stocké dans chaque données d'instance de cube/données de face de cube (si vous souhaitez une texture différente par face de cube) en utilisant GLSL intégré gl_InstanceID
ou gl_PrimitiveID
.
Avec cette implémentation vous lieriez votre tableau de texture une seule fois.
Ce serait bien sûr nécessaire utilisé des extensions de gpu_shader4 et texture_array:
J'ai utilisé ce mécanisme (en utilisant D3D10, mais principe applique aussi) et cela a fonctionné très bien.
Je devais cartographier sur des sprites (points 3D d'une taille d'écran constante de 9x9 ou 15x15 pixels IIRC) différentes textures indiquant chacune une signification différente pour l'utilisateur.
Edit:
Si vous ne vous sentez pas à l'aise avec tous les trucs de shaders, je voudrais simplement trier cubes par les textures, et ne pas commander Z la géométrie. Ensuite, mesurez les gains de performances.
Je voudrais également essayer d'ajouter une passe pré-Z où vous rendez tous vos cubes dans le tampon Z seulement, puis restituez la scène normale, et voyez si cela accélère les choses (si les fragments sont liés, ça pourrait aider).
Pourquoi commander la géométrie? Faites-vous cela sur le processeur? La plupart des moteurs de jeu utilisent une pré-passe Z, dessinant la scène dans le tampon Z seulement. Ensuite, le passage normal, avec les shaders, les textures, etc. Ce mécanisme évite d'être limité par le CPU à cause du tri de milliers d'objets 3D sur le CPU ou le GPU limité à cause d'un overdraw massif. – Stringer
Le Z-ordering peut être une bonne chose, et peut être plus rapide qu'un z-prepass sur certaines scènes. – Calvin1602
@ Calvin1602: vous avez parfaitement raison, c'est juste une supposition éclairée parce que la scène est la plupart du temps des géométries simples mais a un potentiel de surexploitation élevé. Comme toujours avec les performances, benchmark .. @Milo: quel est votre matériel cible? – Stringer