2016-03-08 1 views
0

Je fais du rendu dans 3 FBOs donc j'ai 3 passes. lors du rendu au 3ème FBO quand j'appelle glBindFramebuffer(), mon application s'exécute à des fps plus faibles. Si je n'utilise que le 3ème FBO pour le rendu dans les 3 passages, j'obtiens le même fps mais si j'utilise le 1er FBO pour rendre dans les 3 passages, j'obtiens un fps plus élevé. quelle pourrait être la raison de ce comportement?glBindFramebuffer provoque des pertes de performance dans OpenGLES

Répondre

0

Il y a souvent un coût non intuitif dans ES pour déconnecter un framebuffer en raison de la complexité impliquée dans la préservation du contenu pour la liaison suivante. Cependant, souvent vous ne voulez pas que le contenu soit préservé - par ex. pour le tampon, l'utilisateur peut réellement voir que vous aurez presque toujours effacer, dessiner la géométrie, présenter, terminer la boucle de dessin; effacer, dessiner la géométrie, présenter, terminer la boucle de dessin; etc. Il n'y a donc aucun avantage à conserver le contenu du tampon pour la liaison suivante. Une fois qu'il a été présenté, vous n'allez plus jamais regarder le contenu.

Sous ES 3, vous pouvez signaler l'utilisation de glInvalidateFramebuffer; Si votre GPU et votre plate-forme le supporte, utilisez EXT_discard_framebuffer sous ES 2.

Cette supposition a supposé, bien sûr, que lorsque vous restituez votre troisième objet plutôt que votre premier objet, cela implique de changer plus souvent la liaison. Une seconde supposition: si vos tampons de trame supplémentaires sont pour le rendu vers la texture alors que votre premier est ce que le système a fait pour vous connecter à l'écran, il y a évidemment une différence de performance potentielle car la cible de sortie peut ne pas être même format.