-
OpenGl et VBO
Bonjour,
Je suis sur un jeux de labyrinthe 3D utilisant OpenGl , les vbo.
J'utilise déjà la fonction glGenBuffers,bref
Mais question que je me pose :
Que ce passe t'il si la mémoire de la carte graphique est saturé ?
Dans cette situation : Y a t'il une émulation logiciel pour les VBO (dans le cas ou la mémoire graphique est saturé) ?
Est ce je dois traiter ce problème de saturation ou est ce que c'est OpenGl qui le traite ?
Une autre question :
Les jeux OpenGl professionnel (commercialiser) appelle t'il (à chaque rafraichissement) plusieurs fois ou qu'une seule fois la fonction glDrawElements ?
Dans mon jeux je dois l’appeler en plusieurs fois à chaque changement de texture '''bindtexture'''
Merci
-
Salut!
Non, OpenGL n'a pas de mécanisme de "fallback" si la VRAM (mémoire vidéo) est saturée.
Tu auras une belle erreur équivalent à une std::bad_alloc lors d'une tentative d'allocation sur la VRAM.
C'est donc à toi de faire attention à ce que tu fais.
Pour ta 2ème question, si un objet n'a qu'un seul matériau, ou s'il n'y a pas à gérer de transparence pour cet objet, il y a de fortes chances qu'il n'y ait qu'un seul appel à glDrawElements pour cet objet.
Mais c'est dans le cas d'un rendu "tout bête", sans effets ni rien du tout.
Si tu ajoutes de la transparence, la gestion multimatériaux, et des effets post-traitement, alors il va y avoir une floppée d'appels à glDrawElements pour ton objet.
En fait, il faut se dire qu'un appel à glDrawElements sur un objet correspond à l'application d'un shader sur cet objet. Si tu dois appliquer plusieurs shaders sur cet objet, il y aura autant d'appels à glDrawElements.
C'est une des raisons pour lesquelles la fonction glMultiDrawElements existe, elle te permet de dessiner en une fois tous les objets qui utilisent le même shader, te permettant de réduire drastiquement le nombre d'appels à glDrawElements.
-
Pardon , une erreur de frappe.
Finalement je n'utilise pas gldrawelement mais plutot glDrawArrays , qui est pour moi plus simple d'utilisation.
Je l'appelle plusieurs fois à chaque texture.
voilà;