Программирование графических процессоров с использованием Direct3D и HLSL

Технология COM


DirectX API базируется на технологии COM (Component Object Model) – компонентная модель объектов. Основная идея технологии COM заключается в работе с указателями на виртуальную таблицу функций. COM объект это обычный DLL файл, который зарегистрирован в системе. Доступ к COM объектам осуществляется через так называемые интерфейсы. Один COM объект может содержать в себе несколько интерфейсов. Один интерфейс представляет собой набор функций, объединенных общим назначением. Любой COM объект содержит в себе (наследуется от) интерфейс IUnknown.

Интерфейс IUnknown обеспечивает два базовых свойства COM-объектов:

  1. Подсчет количества обращений к объекту
  2. Способность запрашивать другие интерфейсы

При помощи интерфейса lUnknown можно определить, какие еще интересующие вас интерфейсы поддерживаются объектом. Схематично подход работы технологии COM можно представить следующей блок-схемой.


Основной принцип работы с технологией COM выражается следующими постулатами:

  1. Имеется указатель на таблицу интерфейсов;
  2. Каждая ячейка содержит указатели на методы того или иного интерфейса в отдельности;
  3. Вызов нужного метода напрямую невозможен.

Для того чтобы вызвать необходимый метод, программист должен поделать следующие шаги:

  1. Создать объект;
  2. Получить указатель на соответствующий интерфейс;
  3. Используя данный указатель вызвать нужный метод.

На языке C++ данный механизм вызова метода может быть реализован так:

// создали объект и получили указатель на интерфейс IDirect3D9 pd3d = Direct3DCreate9 (…);

// вызвали метод CreateDevice полученного интерфейса (IDirect3D9) pd3d -> CreateDevice (…);

Механизм интерфейсов имеет обратную совместимость, т.е. приложения, которые используют объекты, например, DirectX7, будут работать и с DirectX9. Следует особо отметить, что разработка приложений для DirectX может вестись с использованием языков высокого уровня: Visual Basic, C++, C#, Pascal (Delphi).

Процесс взаимодействия приложения с видеокартой может быть описан следующей блок-схемой:


Архитектура DirectX в своей работе предусматривает так называемый уровень абстрагирования аппаратных средств – HAL (Hardware Abstraction Layer), который функционирует как промежуточное звено между программным обеспечением и аппаратурой, позволяя разработчикам обращаться к тем или иным компонентам, не зная их марки, модели и других деталей. В результате чего такой уровень абстракции оборудования позволяет настроить работу при любом аппаратном обеспечении. Особо следует отметить, что драйверы устройств (видео-, звуковых и сетевых карт) обычно создаются (пишутся) самими производителями оборудования.



Содержание раздела