ответ

1

Вы не можете иметь несколько «макетов хранилища» в одном VAO. Это по той же причине, что вы не можете иметь несколько текстур в одном объекте текстуры. Или несколько буферов в одном буфере. И так далее.

VAOs «расположение склада». Поэтому, если вам нужно больше одного макета, вам нужно больше одного VAO.

Или вы можете изменить существующее состояние VAO; они не являются неизменными. Но это своего рода побеждает цель ВАО.

+0

У меня есть рабочий код, который сначала определяет и включает мои стандартные атрибуты вершин (положение и нормаль), а затем определяет и включает атрибуты _other_ vertex, которые я использую для своих модельных матриц (используя встроенные массивы). Затем я делаю призыв к розыгрышу. Хотя я изменил состояние VAO на свой второй «glVertexAttribPointer», стандартные атрибуты все еще находятся во время рендеринга. Как это возможно? – mak

+0

@mak: "* Как это возможно? *« Я не могу сказать; Я не смотрю на ваш код. Без этого все, что я могу сделать, это угадать, основываясь на том, что вы описываете для своего кода. –

+0

Хорошо, вот примерно то, что я делаю, 1. Создание и связать ВАО 2. Создание и связать VBO 3. Отправить вершинных данных (положение и нормальные) для GPU 4. glVertexAttribPointer и glEnableVertexAttribArray для положения и нормальные 5 . Создание и связать другие ВБ модель матрицы 6. Загрузить 7. с помощью программы 8. Установите формой 9. glVertexAttribPointer, glEnableVertexAttribArray и glVertexAttribDivisor для модельных столбцов матрицы 10. glDrawArraysInstanced 11. Все, доступного в шейдере я не должен имеют переопределенную позицию и нормаль с столбцами матрицы модели? – mak

0

«Описание», которое вы передаете glVertexAttribPointer, хранится в состоянии VAO.

Итак, для того же VBO вы можете настроить его по-разному в разных атрибутах в одном и том же VAO, а также в другом VAO.