Question

Je dois rendre beaucoup d'images (plusieurs dizaines de milliers) hors écran à l'aide d'OpenGL.
Je suis sous Windows et utilise QT comme framework. la solution ne peut être que Windows, cela n'a pas vraiment d'importance.

D'après ce que j'ai découvert avec Google, il existe plusieurs options pour le faire. Cet article , qui semble plutôt démodé, suggère quelques solutions, parmi lesquelles celles pertinentes sont:

  • Spécifique à Windows - Utilisez CreateDIBSection et liez-y en quelque sorte la texture.
  • Utilisez l'extension pbuffers qui semble être compatible avec ma carte.

Ce fil (Message 6) suggère une Méthode spécifique à QT pour ce faire en utilisant QGLWidget :: renderPixmap

Ma question est la suivante: quel serait le moyen le plus rapide? les tampons semblent être le pari le plus sûr, car leur exécution est garantie sur le matériel, mais l'utilisation de la méthode CreateDIB ne passe-t-elle pas également par le matériel? Qu'en est-il de la méthode QT? il semble y avoir un problème de création de contexte avec celui-ci. je ne voudrais sûrement pas créer un nouveau contexte pour chaque image que je crée.
Est-ce que quelqu'un a une bonne expérience avec cela?

MODIFIER : répondre au commentaire -
J'ai une scène constante qui ne change pas du tout et je la présente sous différents points de vue. Pour l'instant, les images retournent à l'utilisateur et seront traitées par la CPU. Peut-être qu’à l’avenir ils seront traités sur le processeur graphique.

Était-ce utile?

La solution

Utilisez FBO . C’est rapide, portable et bien plus agréable à utiliser que les pbuffers.

EDIT: pour des performances optimales, effectuez un rendu alternatif entre deux FBO différents:

  1. Rendu en A
  2. Rendu en B
  3. relisez A et traitez-le
  4. Rendu en A
  5. relu de B
  6. Goto 2

De cette façon, vous pouvez relire un FBO puis le traiter pendant que le GPU restitue en parallèle.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top