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