Я разрабатываю небольшой уровень абстракции OpenGL для быстрого прототипирования рендеринга графического процессора. Прямо сейчас я разрабатываю объектную модель для отделения буферных объектов от кода рендеринга шейдера.
Цель состоит в том, чтобы упростить изменение и данных, и кода шейдера, поэтому я пытаюсь уменьшить количество явных связей между ними.
Одна вещь, которая сейчас немного мешает мне, - это VAO. Например, если мои данные о вершинах выглядят так:
vbo = [1,1,1,1]
Тогда эти данные действительно могут работать с этими двумя объявлениями вершин шейдера:
in float x;
in float y;
or
in vec2 position;
Проблема в том, что привязка VAO должна быть другой. Я пришел к выводу, что информация VAO более тесно связана с кодом шейдера, чем с фактическими данными объекта.
Более того, вы можете фактически «вывести» спецификацию VAO прямо из кода шейдера (т.е. VAO - это своего рода семантика, а семантика указывается в коде шейдера).
Итак, я подумал, что вместо того, чтобы хранить VAO в объекте данных, я мог бы вывести его автоматически и сохранить в объекте шейдера. Затем каждый раз, когда я рисую, я привязываю VBO из объекта данных и VAO из шейдера. Таким образом, я мог бы работать с одним и тем же VBO с разными шейдерами.
Это безумие? Есть ли в этом принципиально очевидные недостатки?