Bonsoir à tous, j'ai l'habitude d'utiliser glDrawArrays() dans mes rendus mais j'aimerais optimiser ces derniers, entre autres je viens de coder une petite lib qui doit lire des fichiers .obj et faire le rendu avec lDrawElements() (Jusqu'à présent j'utilisais une ancienne lib qui appelait glDrawArrays() lors du rendu). J'ai décidé de créer cette nouvelle lib car je pense que glDrawElements() est plus adaptée que glDrawArrays() dans le cas des fichiers .obj car ces fichiers fournissent des indices de sommets lors de la description des faces.
J'ai terminé le codage mais je me rends compte que le rendu est bien plus lent qu'avec l'ancienne lib qui utilise glDrawArrays(), alors que je charge le même fichier .obj et j'utilise exactement le même shader. Le GPU est trop sollicité et le ventilateur du PC se met à tourner rapidement, voici des captures d'écran du gestionnaire des tâches :
C'est nettement moins performant d'utiliser plusieurs vertex buffers (un par information) plutôt qu'un seul contenant toutes les informations entrelacées.
Pour utiliser proprement un index buffer avec le format .obj, il faut faire un cache par index de position/normale/uv pour identifier un sommet unique.
Tu suggères de mettre tous les attributs de sommets dans un seul tableau ? C'est vrai que ça me semble plus propre mais il y a un hic : Etant donné que je fais du multitexturing il faut que le fragment shader sache quelle texture appliquer et c'est pour ça que j'utilise un tableau d'entiers ("attribNumtex") mais si j'utilise un tableau unique alors je devrais utiliser des flottants pour cet attribut et par expérience je sais que la conversion flottant/entier dans le shader est plutôt bancale. Ou alors il faut laisser ce tableau d'entiers à part.
Un tableau unique ne veut pas dire un tableau de flottants, typiquement on entrelace des vec2 avec des vec3 et des int sans souci. Pense à un tableau de structures concrètement.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Mes articles | Nazara Engine | Discord NaN | Ma chaîne Twitch (programmation)
Mes articles | Nazara Engine | Discord NaN | Ma chaîne Twitch (programmation)