Технология COM
DirectX API базируется на технологии COM (Component Object Model) – компонентная модель объектов. Основная идея технологии COM заключается в работе с указателями на виртуальную таблицу функций. COM объект это обычный DLL файл, который зарегистрирован в системе. Доступ к COM объектам осуществляется через так называемые интерфейсы. Один COM объект может содержать в себе несколько интерфейсов. Один интерфейс представляет собой набор функций, объединенных общим назначением. Любой COM объект содержит в себе (наследуется от) интерфейс IUnknown.
Интерфейс IUnknown обеспечивает два базовых свойства COM-объектов:
- Подсчет количества обращений к объекту
- Способность запрашивать другие интерфейсы
При помощи интерфейса lUnknown можно определить, какие еще интересующие вас интерфейсы поддерживаются объектом. Схематично подход работы технологии COM можно представить следующей блок-схемой.
Основной принцип работы с технологией COM выражается следующими постулатами:
- Имеется указатель на таблицу интерфейсов;
- Каждая ячейка содержит указатели на методы того или иного интерфейса в отдельности;
- Вызов нужного метода напрямую невозможен.
Для того чтобы вызвать необходимый метод, программист должен поделать следующие шаги:
- Создать объект;
- Получить указатель на соответствующий интерфейс;
- Используя данный указатель вызвать нужный метод.
На языке C++ данный механизм вызова метода может быть реализован так:
// создали объект и получили указатель на интерфейс IDirect3D9 pd3d = Direct3DCreate9 (…);
// вызвали метод CreateDevice полученного интерфейса (IDirect3D9) pd3d -> CreateDevice (…);
Механизм интерфейсов имеет обратную совместимость, т.е. приложения, которые используют объекты, например, DirectX7, будут работать и с DirectX9. Следует особо отметить, что разработка приложений для DirectX может вестись с использованием языков высокого уровня: Visual Basic, C++, C#, Pascal (Delphi).
Процесс взаимодействия приложения с видеокартой может быть описан следующей блок-схемой:
Архитектура DirectX в своей работе предусматривает так называемый уровень абстрагирования аппаратных средств – HAL (Hardware Abstraction Layer), который функционирует как промежуточное звено между программным обеспечением и аппаратурой, позволяя разработчикам обращаться к тем или иным компонентам, не зная их марки, модели и других деталей. В результате чего такой уровень абстракции оборудования позволяет настроить работу при любом аппаратном обеспечении. Особо следует отметить, что драйверы устройств (видео-, звуковых и сетевых карт) обычно создаются (пишутся) самими производителями оборудования.