Envoyé par
3DArchi
Envoyé par
gbdivers
Tu peux également ajouter dans ta classe StructureObjet le constructeur par copie, l'opérateur d'affectation = et les opérateurs d'égalité et de différence (== et !=)
La copie et l'affectation devrait être générée automatiquement et de façon approprié par le compilateur pour une classe comme celle-ci. Nul besoin de les redéfinir. (cf
F.A.Q.)
En fait, je vais être encore plus critique sur ce que j'ai dit : il ne faut surtout pas avoir besoin de redéfinir le constructeur par copie ou l'opérateur d'affectation.
Pour que le tableau de Vertex vector<Vertex> soit un tableau de GLfloat, il faut absoluement que la classe Vertex ne contiennent que les GLfloat. Donc pas de pointeur ou d'autres structures. Donc si on a besoin de redéfinir le constructeur par copie, c'est qu'il y a un problème.
Donc il faut oublier ce que j'ai dit : pas de redéfinition du constructeur par copie (sauf traitement spécifique fait dans le constructeur mais je vois pas quoi à priori)
Donc d'où l'utilité d'un non pointé pour l'utilisation de la méthode VBO :
glBufferData(target, v.size() *3* sizeof( GLfloat ), NULL, mode);
Block de memoire contigüe c'est ca ?
Oui, les buffers copy prennent l'adresse d'un bloc mémoire et la taille du bloc mémoire et le copie en une seule fois dans la mémoire gpu. Donc il faut que les données forment un seul bloc en mémoire (données contiguës).
Par contre, petit détail, ton code ne copie pas les données vers le gpu. Il faut également donner le pointeur vers tes données (ou appeler la copie explicitement) :
glBufferData(target, v.size() *3* sizeof( GLfloat ), &VertexArray[0], mode);
Partager