2011-05-08 4 views
3

Je suis à la recherche d'algorithmes plus intelligents pour gérer les VBO dans OpenGL. En l'état actuel des choses, je stocke actuellement chacun de mes modèles dans des VBO de 4 Mo. En ce moment, je stocke actuellement chacun de mes modèles dans des VBO de 4Mo. Si le modèle est supérieur à 4 Mo, il est stocké séparément. Les objets sont stockés de sorte que les modèles sont regroupés pour réduire le nombre de liaisons.Algorithmes de pool mémoire

Le problème que je rencontre a été de savoir comment nettoyer les VBO inutilisés, qui ne sont que peu utilisés. Toutes les ressources sur la façon dont je pourrais mieux gérer ces pools de mémoire sont appréciées.

+1

Je suppose que vous avez déjà essayé de créer et de détruire des VBO de la taille requise et de laisser le pilote gérer la gestion de la mémoire? (NB: 4MB! = 4096000 octets) –

+0

@daniel: Je ne suggère pas que les VBOs ne survivent qu'une seule image, je suggère que chaque modèle a son propre VBO, au lieu de les emballer ensemble. Alors vous n'aurez pas ces VBO "les plus inutilisés". Quel genre d'application est-ce de toute façon, que les modèles sont déchargés fréquemment? –

+0

C'est juste un défaut possible dans le système que j'utilise ci-dessus, la raison pour laquelle j'évite des VBO individuelles est pour moins de liaisons, en particulier pour les données statiques. Quant à savoir pourquoi 4mb, c'est la taille VBO recommandée par ATI/Nvidia. L'application ne va pas nécessairement faire un déchargement fréquent, mais c'est quelque chose que j'ai remarqué qui pourrait être un problème. – dcousens

Répondre

1

Les VBO ne sont pas comme la mémoire normale, il n'y a aucun besoin de "gestion de la mémoire" sophistiquée. Vous allouez un propre VBO de taille appropriée pour chaque maillage distinct et vous en terminez avec. Toute tentative de déjouer le pilote se traduira simplement par des performances inférieures.

De même, il n'y a aucun avantage à essayer de rendre vos VBO aussi grandes que possible. En fait, les VBO de taille modeste d'environ 0,5k à 5k vertices fonctionnent mieux selon mon expérience.

+0

Que voulez-vous dire par modes dimensionnés? – dcousens

+0

Parier c'est une faute de frappe pour "modèles de taille"! :) –

+0

effectivement je voulais écrire "modeste" (notez le 't') – datenwolf

1

À l'origine, j'avais quelque chose comme vous. J'ai implémenté une simple liste de diffusion dans environ 100 lignes de code afin que les segments VBO libérés puissent être réutilisés. Il a considérablement réduit les réallocations de VBO qui me donnaient des accrochages de trame. J'ai utilisé un algorithme de meilleur ajustement pour les allocations car j'ai beaucoup de mailles qui ont le même nombre de vertex et de faces.

+0

Pourriez-vous développer votre solution? – dcousens

Questions connexes