2017-10-09 4 views
1

J'ai donc passé en revue des listes de questions sur le rendu en mode retenu ou immédiat, mais personne ne semble indiquer si les données de scène stockées par l'API graphique (OpenGL/DirectX) sont stockées dans la RAM ou dans la mémoire du GPU. Le bon sens me dit que l'API va stocker des données de scène sur le GPU pour vous, mais rien de ce que j'ai vu en ligne n'a spécifié cela directement. Est-ce parce que cela dépend des paramètres de l'API? Pour être clair, ma question est la suivante: Dans les graphiques en mode retenu, les données de la scène sont-elles toujours stockées dans la mémoire du GPU ou dépendent-elles de certains paramètres de l'API graphique?Les données du mode conservé sont-elles stockées sur le GPU?

+1

Cela dépend définitivement de l'API. Autant que je comprenne, il n'y a même pas de garantie que l'une des API en mode retenu utilise un GPU pour dessiner du tout. – BDL

+0

Donc, par ** default ** dans OpenGL moderne, s'il y a un GPU présent, OpenGL stocke-t-il toujours toutes les données de scène sur le GPU? (En mode conservé, bien sûr, puisque le mode immédiat n'est pas présent dans les versions plus récentes) – pIjIN

+1

Il pourrait le stocker dans la mémoire du GPU. Sauf si l'implémentation décide qu'il vaut mieux le stocker dans la mémoire de la CPU (par exemple lorsque les données sont mappées dans la mémoire de la CPU ou lorsque la mémoire du GPU est simplement pleine). – BDL

Répondre

1

Dans OpenGL moderne. Vous stockez vos données comme des sommets dans certains tableaux que ce tableau est stocké dans la mémoire de la CPU (RAM). Quand je fais ceci comme ceci

void* memory = glMapBuffer(...); 

Ceci me retourne la mémoire dans la zone du pilote de périphérique. Ainsi, vous copiez vos données directement dans la mémoire du pilote de périphérique et vous pouvez éviter la copie locale des données. Plus tard sur le pilote de périphérique va déplacer ces données vers la mémoire graphique. En fonction de vos paramètres comme le GL_STATIC_DRAW, le pilote de périphérique GL_DYNAMIC_DRAW décide quelle mémoire (GPU ou CPU) doit être sélectionnée et comment les données doivent être alignées pour un accès optimal. Donc quel en quel mode immédiat fait cela (OpenGL)

Si vous voyez les anciennes versions d'OpenGL avait quelque chose appelé comme liste d'affichage. Lorsque vous écrivez une fois la géométrie et la compilez dans la liste d'affichage et lorsque vous voulez dessiner, utilisez simplement le code précompilé. Donc, certaines fonctionnalités conservées étaient là.

En pure mode retenu API comme WPF toute la charge de travail majeure comme l'initialisation, la gestion du cycle de vie est effectuée par API de sorte que vous avez très peu de contrôle sur cette optimisation et donc dépend de API là où il met des données pour un accès optimisé .

+0

Je n'ai pas dit la mémoire GPU. Si vous lisez attentivement, je mentionne la mémoire du pilote. Quand le pilote le déplace vers le GPU dépend de l'implémentation et non de l'OpenGL c'est sûr. Mais obtenir des choses directement dans la mémoire du conducteur est encore une étape de l'optimisation. –

+1

Merci pour l'édition effectuée. –