DirectX против OpenGL
Алексей Малашин
Xakep Железо, номер #006, стр. 006-068-5
HAL может содержать три разных типа модели обработки вершин (на одном устройстве) - программный, аппаратный (который зависит от конкретного девайса) и смешанный. Аппаратный тип поддерживает только обработку вершин и дает возможность небольших изменений состояния устройства по запросу приложения. Кроме использования возможностей видеокарты, DirectX в полной мере пользуется инструкциями AMD 3DNow! и Intel Pentium SIMD (одна команда – много данных), которые включены в обработку некоторых вершинных шейдеров.
Для создания сцены потребуется инициализировать D3D объект для рисования, включая создание объекта, указание параметров отображения, создание D3D устройства, причем в параметрах устройства можно указать способ обработки вершин – аппаратный или программный. Далее производятся похожие с OpenGL преобразования, но с учетом того, что все операции работают над объектами. При завершении программы нужно закрыть устройство, но на деле все же этот процесс выглядит немного сложнее.
В последней версии DirectX появились интересные возможности, увеличивающие реалистичность графики:
HLSL (High-Level Shader Language - Высокоуровневый Язык Шейдеров) - позволяет управлять потоком команд;
Контроль над выполнением шейдера;
Взаимодействие с GDI (Graphics Device Interface);
Поддержка замещающих карт (Displacement mapping) - изменение координат полигона;
Поддержка 40-битного цвета (более 1.0 млрд. цветов).
Pixel Shaders - это небольшие подпрограммы (выполняются на графическом процессоре), которые работают с каждым пикселем при создании текстуры и применяются для просчета света, создания различных эффектов. В библиотеке OpenGL они отсутствуют по причине того, что когда создавалась спецификация, шейдеры еще не были придуманы, и поэтому сегодня их включили в виде расширений.
Отличия. По своей сути обе библиотеки различаются обработкой графической информации, и если OpenGL – это процедурная система, то DirectX основан на COM-модели. Однако, даже несмотря на различную природу работы с информацией, обе они «заточены» под взаимодействие с «железом». OpenGL не поддерживает Pixel Shaders, однако это не повод отказываться от работы с этой библиотекой (пример тому Unreal Tournament, движок которого построен на основе OpenGL). Библиотека DirectX умеет эмулировать некоторые функции, не поддерживаемые аппаратно, однако на пиксельном уровне это неосуществимо и программа должна сама проверять возможности такой эмуляции. Чтобы внедрять новые технологии, у OpenGL существует механизм расширений, когда различные функции (недоступные изначально, но реализованные аппаратно) разрабатываются производителем железа и поддерживаются спецификацией для конкретной модели видеоадаптера. В DirectX система немного другая - версия библиотеки может содержать или не содержать определенных функций (даже если они присутствуют в железе) и для их поддержки требуется ждать нового релиза DX, однако Microsoft активно общается с производителями видеокарт, и такая ситуация возникает достаточно редко.