Связывание OpenGL и отношения между сущностями

12

В основном это вопрос документации. Я надеюсь, что это правильное место, а не, например, программисты или stackoverflow.

Я не читал спецификацию OpenGL, но из книг (Красная книга) и различных руководств я не могу правильно понять, как различные объекты и части API взаимодействуют и взаимосвязаны.

Например, я знаю, что если VAO привязан, то привязка VBO и установка атрибута приведут к привязке VBO к VAO.

Но объектов много, их отношение может различаться. Например, VAO совершенно не связана с текущей программой затенения, но результат операций рисования может зависеть от них обоих.

Среди всех различных компонентов OpenGL я вижу некоторые отношения, такие как A-binds-to-B или A-and-B-are-by-by-C. Все эти отношения сходятся в определении того, как можно изменить состояние контекста, как можно что-то изменить, как можно сохранить вещи вместе и оптимизировать.

Я ищу ресурсы, объясняющие именно эти отношения. Как и диаграмма UML, график или даже текстовый документ, который не фокусируется на вызовах, но в сжатой форме описывает, как различные компоненты OpenGL взаимодействуют и связаны друг с другом.

Вы знаете, где найти такой ресурс?

AkiRoss
источник
3
Отличный вопрос У меня вся библиотека / движок OpenGL запущена и работает без четкого ответа на этот ключевой вопрос.
Дэвид ван Бринк
1
Привязка VBO не привязывает его к VAO. Это вместо этого достигается с glVertexAttribPointer(). Диаграмма для объектов OpenGL была бы довольно поверхностной и простой, на самом деле в OpenGL всего несколько различных объектов. VAO используют буферы для атрибутов. Буферные текстуры поддерживаются буферами. Кадровые буферы имеют текстурные вложения. Команды рисования используют текущий VAO, текущую программу, текущий кадровый буфер, текущие настройки сэмплера и текущий индексный буфер / косвенный буфер. Вы могли бы, вероятно, нарисовать диаграмму самостоятельно.
Дитрих Эпп
1
Извините, я не собираюсь рисовать для вас картинку.
Дитрих Эпп
2
Хороший вопрос, и с того места, где я стою, удачи в получении исчерпывающего ответа без значительного вознаграждения.
инженер
2
Дизайн OpenGL является отличным аргументом о том, почему вы не должны использовать глобальные переменные ;)(весь API представляет собой один большой беспорядок в глобальных данных)
гламперт

Ответы:

7

Итак, я попытался нарисовать свою собственную диаграмму. Он не является исчерпывающим, в основном потому, что я не интересуюсь некоторыми вещами прямо сейчас, а также потому, что я хотел, чтобы он был читабельным (даже если это не формально определенный график, я думаю, что он должен быть легко читаемым).

Кроме того, поскольку, как представляется, это представляет интерес для некоторых людей, я хочу поделиться им здесь, чтобы получить обратную связь и проверить ее. Я использовал OpenGL wiki в качестве справочника, чтобы проверить правильность, но, возможно, я допустил ошибки.

Кроме того, если предоставленной информации вам недостаточно или я упустил важные отношения, которые стоит включить в диаграмму, не стесняйтесь предлагать ее, и я постараюсь обновлять ее.

Диаграмма отношений привязки OpenGL

Опять же, не стесняйтесь сообщать об ошибках, проблемах или предложениях, они горячо приветствуются.

РЕДАКТИРОВАТЬ

  1. Связь между чертежом и атрибутами отсутствовала: атрибуты должны быть включены, чтобы они были эффективными при рендеринге
AkiRoss
источник