Где недорого купить компьютеры и комплектующие? Узнай здесь!

DirectX против OpenGL

Алексей Малашин

Xakep Железо, номер #006, стр. 006-068-4


Buffer Objects (буферные объекты) – если требуется сохранить данные (те же Vertex Arrays) в быстрой памяти видеоадаптера для последующего повторного использования, существуют Buffer Objects, которые осуществляют распределение, инициализацию и извлечение информации об объекте из памяти.

Evaluators – средства для множественных преобразования координат и цвета. После создания четырех вершин определяются команды для обработки (которые записываются в Display List) и проводятся усреднения и просчет геометрической поверхности (на этом шаге уже появляется каркас объекта).

Coordinate Transformation (трансформация координат) – все объекты перед выводом во framebuffer претерпевают изменение своих координат (из их программного представления в «оконное» для framebuffer), схема такого преобразования представлена на рисунке 3. Причем в этот момент происходит подготовка к растеризации (обрезаются лишние части фигуры, которые вылезают за экран).

Rasterization – процесс, в котором вся картинка преобразовывается к 2D виду. Растеризатор обрабатывает объект, раскрашивает его, накладывает текстуру, и на выходе получается кадр, который далее поступает во framebuffer, а уже оттуда на монитор.

То есть видно, что программист последовательно определяет только основные параметры для той или иной операции. Дальнейшее происходит без его участия, средствами библиотеки, драйвера и, наконец, видеоадаптера.

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

DirectX. Этот API является комплексной библиотекой, которая содержит в себе интерфейсы (для программиста) по обработке не только графики. Мы же рассматриваем только графическую ее часть.

Так же как и OpenGL, DirectX на низком уровне взаимодействует с аппаратной частью компьютера и предоставляет программисту набор интерфейсов для обработки графики, однако большим отличием от конкурента является использование Component Object Model (COM). То есть для работы с изображением нужно не просто вызвать определенную функцию или процедуру, а провести еще ряд дополнительных манипуляций для получения доступа к объектам (работа с которыми происходит только через интерфейсы), а после этого каждому объекту нужно заполнить некий набор необходимых свойств, без которых он является неопределенным. Актуальными все эти шаги являются только для программиста, поскольку после компиляции программы команды на обработку графики (для драйвера и видеоплаты) идут последовательно, вне зависимости от того, как было создано приложение.

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

На аппаратном уровне API выполняется следующим образом: D3D обеспечивает независимость от Hardware Abstraction Layer (HAL - аппаратный уровень абстракции). HAL – это железо-зависимый интерфейс (не поддерживающий эмуляции), который разрабатывается создателем видеоадаптера и включает в себя поддержку D3D. В данном случае Microsoft описала, как должна быть реализована D3D аппаратно, а уже производители реализуют нужные функции в своих чипах. То есть получается такая ситуация, когда программа ничего не знает об установленном оборудовании и напрямую с ним не взаимодействует.

Назад на стр. 006-068-3  Содержание  Вперед на стр. 006-068-5

Где можно зарабатывать 500$ в месяц? Узнай здесь!