3D API или язык акселераторов, Что это такое - Компьютерная графика и ее аппаратная реализация (обзор видеокарт)

Что это такое

3D-акселератор -- сложная штуковина. Несколько десятков миллионов вентилей в основном кристалле, еще несколько -- в сервисных (DDR, RAMDAC и т. д.) плюс электронные цепи, размещающиеся на самой плате видеокарты. И со всем этим надо как-то управляться. У акселератора есть свой ассемблер (не совсем так, но сравнение хорошее) и специальные команды, адреса и интерфейсы, через которые им можно управлять. У каждого конкретного акселератора (а их сотни) свои особенности, свои дополнительные команды, а иногда и целые блоки. Если написать программную последовательность для одного акселератора, на другом она работать уже не будет. Или будет, но не адекватно. А игры надо выпускать совместимой с разными акселераторами. На практике это означает, что придется писать не один движок, а столько, сколько акселераторов поддерживается. Чтобы этого не делать придумали программно-аппаратные интерфейсы -- 3D API.

Это специальная библиотека, которая позволяет разработчикам не думать о таких мелочах, как адреса видеобуфера или заполнение системных регистров, и сосредоточиться на процессе разработки. Например, чтобы создать точечный источник света, нужно задействовать многие команды акселератора, подумать о перераспределении памяти и еще много о чем. А вот через API это делается всего одной командой (максимум -- двумя). Разработчик пишет эту команду, а все остальное делает 3D API. Примерно так же делаются и другие сложные вещи. Например, в OpenGL такая сложнейшая вещь, как NURBS (которая до сих пор считается признаком технологического шика), создается несколькими простыми командами.

В работе акселератора много рутины. Поэтому многие стандартные действия, вроде подготовки видеообласти (viewport), выполняет тот же 3D API. Не думайте, что он работает только с акселератором. И с процессором, и с памятью, и даже с другими API, например с Windows API, который отвечает за прорисовку окон. Получается, разработчику игр почти ничего делать не надо: задал несколько простых стандартных команд, и готово. Нет, не получается. Зато с поддержкой 3D API остаются время и силы на проработку действительно интересных и сложных вещей, не рутинных, а творческих.

На самом деле взаимодействие 3D API и акселератора несколько сложнее. Ведь между ними стоит еще и драйвер. Но драйвер -- существо подневольное, что ему API скажет, то он и будет делать. Зачем он нужен? Для разных версий акселераторов нет разных 3D API. Один 3D API, по-хорошему, должен понимать все железо, какое только есть на свете. Но если бы он на самом деле умел общаться со всем железом, то весил бы не несколько мегабайт. Поэтому 3D API один на всех, а вот драйверов много -- под каждый акселератор свой. Говоря программистским языком, драйвер предоставляет небольшой, а 3D API -- очень большой уровень абстракции. Некоторые тут возмутятся и воскликнут, что тот же Detonator подходит к нескольким десяткам разных акселераторов. Путаете, господа. Detonator -- это не драйвер, а целый пакет драйверов. А для каждого типа акселераторов "дрова" нужны и вправду уникальные.

Но на свете несколько 3D API от разных компаний. И разные игры также заточены под разные API. И даже те игры, которые формально работают с несколькими API, на самом деле по-настоящему хорошо понимают только один-два API. Или нагло эмулируют (симулируют). Впрочем, даже с родными API нередко возникают проблемы.

Похожие статьи




3D API или язык акселераторов, Что это такое - Компьютерная графика и ее аппаратная реализация (обзор видеокарт)

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