За все время существования стандарта в нем не расширили ни одной основной возможности графического аппаратного обеспечения. Создатели OpenGL, Марк Сигал (Mark Segal) и Курт Экли (Kurt Akeley), так объясняют это: «Одна из причин такого решения - производительность. Графическое оборудование обычно спроектировано таким образом, что конкретные операции должны выполняться в определенном порядке; замена этих последовательностей произвольными алгоритмами обычно недопустима». Это утверждение почти соответствовало состоянию стандарта на 1994 г. (хотя тогда уже использовались программируемые графические архитектуры). Но сегодня практически все графическое аппаратное обеспечение является программируемым. Быстрое увеличение количества расширений и необходимость поддерживать интерфейс DirectX от Microsoft просто не оставляет производителям другого выбора. (Как станет ясно из последующих глав, предоставление разработчикам доступа к этим возможностям и есть цель языка шейдеров OpenGL.)

1.4. Буфер кадров

1.3. Архитектура приложений OpenGL

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

Архитектура приложений OpenGL представлена моделью клиент-сервер. Приложение (клиент) посылает команды, которые интерпретируются и обрабатываются реализацией OpenGL (сервером). Приложение и OpenGL-сервер могут выполняться как на одном компьютере, так и на двух разных. Архитектура OpenGL подразумевает необходимость сохранять некоторые параметры состояния во время работы приложения. Часть из них хранится в адресном пространстве приложения (клиентские состояния), но большинство - в адресном пространстве OpenGL-сервера (серверные состояния).

Команды OpenGL всегда обрабатываются в том же порядке, в котором они получены сервером. Иногда завершение их выполнения может задерживаться из-за промежуточных операций, тогда команды OpenGL буферизуются. Внеочередное выполнение команд OpenGL не разрешено. Это означает, например, что следующий примитив не будет нарисован до тех пор, пока не будет полностью закончено рисование предыдущего. Такой порядок выполнения команд справедлив также для операций чтения из буфера и запросов состояния. Эти команды возвращают результат, полностью согласованный с выполнением всех предыдущих команд.


⇐ Предыдущая| |Следующая ⇒