2011-10-08 2 views
1

Je rencontre un problème assez étrange avec OpenGL. Lorsque j'essaie d'utiliser glVertexPointer sans tampon lié à GL_ARRAY_BUFFER et en utilisant Vertex Array Object (VAO), il génère une erreur d'opération non valide. Cette erreur est nulle part dans la documentation de glVertexPointer.glVertexPointer opération invalide

Lorsque je génère un tampon et le lie à GL_ARRAY_BUFFER, l'erreur disparaît, mais comme mes données sont stockées sur la RAM, je lie 0 et utilise un pointeur vers la RAM. De plus, en ne liant pas les VAO, je n'ai plus d'erreur, mais j'ai remarqué que quand je ne l'utilise pas, mes autres choses dans le programme sont corrompues.

Peut-être que j'ai manqué quelque part que les pointeurs de réglage, alors que VAO est lié et que le tampon n'est pas, va être une opération invalide invalide? Théoriquement, je pourrais déplacer ces données vers les VBO et ne pas déranger, mais j'aimerais savoir pourquoi cela se produit.

+3

Nous avons besoin de code ici – crazyjul

Répondre

2

Le registre d'extension pour ARB_vertex_array_object indique clairement qu'ils ne peuvent pas être utilisés avec des baies côté client. Cela ne devrait pas être différent pour les versions OpenGL de base supportant les VAO et est dû au fait que les VAO sont des états de serveur. C'est donc un comportement complètement attendu d'obtenir une erreur d'opération invalide. Il suffit de stocker tout dans les VBO (peut-être en utilisant GL_DYNAMIC_DRAW ou GL_STREAM_DRAW comme utilisation si les données changent fréquemment).

+0

Voulez-vous dire 'GL_STREAM_DRAW' au lieu de' GL_STATIC_DRAW'? Le premier est pour les choses qui changent très fréquemment (par exemple, chaque image); le dernier est pour des choses qui changent rarement. – Wyzard

+0

@Wyzard Oui, faute de frappe. –

+0

Merci, je l'ai manqué pendant que je lisais cette page. – Raven

Questions connexes