Прив'язка OpenGL та відносини між сутностями


12

Це здебільшого питання документації. Я сподіваюсь, що це правильне місце, щоб запитати, а не, наприклад, програмістів або stackoverflow.

Я не читав специфікацію OpenGL, але з книг (Червоної книги) та різних навчальних посібників я не можу правильно зрозуміти, як взаємодіють і співвідносяться різні об'єкти та частини API.

Наприклад, я знаю, що якщо VAO пов'язаний, то зв'язування VBO та встановлення атрибута призведе до того, що VBO буде пов'язаний з VAO.

Але об’єктів багато, їх відношення може відрізнятися. Наприклад, VAO абсолютно не пов'язаний з поточною програмою затінення, але результат операцій малювання може залежати від обох.

Серед усіх різних компонентів OpenGL я бачу такі відносини, як A-bind-to-B або A-and-B-are-used-by-C. Усі ці відносини узгоджуються у визначенні того, як можна змінити стан контексту, як можна змінити речі, як зберегти речі разом і оптимізувати.

Я шукаю ресурси, які пояснюють саме ці відносини. Як і UML-діаграма, графік або навіть текстовий документ, який не фокусується на викликах, але компактно описує, як взаємодіють різні компоненти OpenGL та співвідносяться один з одним.

Ви знаєте, де знайти такий ресурс?


3
Чудове запитання. У мене вся робота бібліотеки / двигуна OpenGL працює без надто чіткої відповіді на це ключове питання.
Девід ван Брінк

1
Прив'язування VBO не пов'язує його з VAO. Це натомість досягається за допомогою glVertexAttribPointer(). Діаграма для об’єктів OpenGL була б досить дрібною і простою, насправді в OpenGL існує небагато різних об'єктів. VAO використовують буфери для атрибутів. Текстури буфера підтримуються буферами. Каркасні рамки мають вкладені текстури. Команди малювання використовують поточний VAO, поточну програму, поточний кадрбуфер, поточні параметри вибірки та поточний буфер індексів / непрямий буфер. Ви, ймовірно, самі могли намалювати схему.
Дітріх Епп

1
Вибачте, я не збираюся малювати для вас картину.
Дітріх Епп

2
Хороше запитання, і звідки я стою, удачі отримати вичерпну відповідь, не ставлячи на це значної щедрості.
Інженер

2
Дизайн OpenGL є чудовим аргументом щодо того, чому не слід використовувати глобальні змінні ;)(весь API - це величезна безлад глобальних даних)
glampert

Відповіді:


7

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

Крім того, оскільки, здається, цікавить деяких людей, я хочу поділитися ним тут, щоб отримати зворотний зв'язок і перевірити його. Я використовував вікі OpenGL як орієнтир, щоб перевірити правильність, але, можливо, я ввів помилки.

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

Діаграма відношення прив'язки OpenGL

Знову ж, не соромтеся повідомляти про помилки, питання чи пропозиції, вони раді вітати.

EDIT

  1. Відсутність зв'язку між малюнком та атрибутами відсутня: атрибути повинні бути включені, щоб бути ефективними під час надання
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.