Поделиться через


Типы устройств (Direct3D 9)

Устройство HAL

Основной тип устройства — это устройство hal, которое поддерживает аппаратное ускорение растеризации и аппаратной и программной обработки вершин. Если компьютер, на котором работает приложение, оснащен адаптером дисплея, поддерживающим Direct3D, приложение должно использовать его для операций Direct3D. Устройства Direct3D hal реализуют все или часть преобразования, освещения и растеризации модулей в оборудовании.

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

Чтобы создать устройство hal, вызовите CreateDevice с помощью D3DDEVTYPE_HAL в качестве типа устройства.

Эталонное устройство

Direct3D поддерживает дополнительный тип устройства, называемый эталонным устройством или эталонным растризатором. В отличие от программного устройства, эталонный растризатор поддерживает каждую функцию Direct3D. Это устройство предназначено для отладки и поэтому доступно только на компьютерах, на которых установлен пакет SDK DirectX. Так как эти функции реализуются для точности, а не скорости и реализуются в программном обеспечении, результаты не очень быстры. Эталонный растризатор использует специальные инструкции ЦП всякий раз, когда он может, но он не предназначен для розничных приложений. Используйте эталонный растризатор только для тестирования компонентов или демонстрационных целей. Чтобы создать эталонное устройство, вызовите метод CreateDevice с помощью D3DDEVTYPE_REF в качестве типа устройства.

HAL и устройства REF

Устройства HAL (аппаратный уровень абстракции) и REF (raference rasterizer) являются двумя основными типами устройств Direct3D; первый основан на поддержке оборудования и очень быстро, но может не поддерживать все; в то время как вторая не использует аппаратное ускорение, поэтому очень медленно, но гарантированно поддерживает весь набор функций Direct3D, правильно. В общем случае вам потребуется использовать только устройства HAL, но если вы используете некоторые расширенные функции, которые графические карта не поддерживаются, может потребоваться вернуться к REF.

В другой раз, когда вы можете использовать REF, если устройство HAL создает странные результаты - то есть вы уверены, что ваш код правильный, но результат не то, что вы ожидаете. Устройство REF гарантирует правильное поведение, поэтому вы можете протестировать приложение на устройстве REF и проверить, продолжается ли странное поведение. Если это не так, это означает, что либо (a) ваше приложение предполагает, что графические карта поддерживают то, что это не так, или (b) это ошибка драйвера. Если устройство REF по-прежнему не работает, это ошибка приложения.

Оборудование и обработка вершин программного обеспечения

Оборудование и обработка вершин программного обеспечения действительно применяется только к устройствам HAL. При отправке вершин через конвейер необходимо преобразовать (мир, представление и матрицы проекции), а также светить (встроенные световые индикаторы D3D) — этот этап обработки называется T&L (для преобразования и освещения). Обработка вершин оборудования означает, что это делается в оборудовании, если оборудование поддерживает его; ergo, обработка вершин программного обеспечения выполняется программным обеспечением. Общая практика заключается в том, чтобы сначала попытаться создать устройство аппаратного T&L, и если это завершается ошибкой mixed, и если это завершается сбоем, попробуйте программное обеспечение. (Если программное обеспечение завершается ошибкой, откадите и завершите работу с ошибкой.

Устройства Direct3D