netlib.narod.ru< Назад | Оглавление | Далее >

Проверка возможностей устройства

Для каждой вещи, которую устройство способно или неспособно выполнить на аппаратном уровне, используется термин возможность (capability). В Direct3D есть структура Caps, где перечислены все имеющиеся у устройства возможности. После создания устройства вы можете использовать свойство Caps устройства, чтобы определить поддерживаемые возможности, но что делать, если вы хотите знать, какие возможности поддерживает устройство, до его создания? Естественно, здесь также на помощь приходит метод класса Manager.

Добавим к созданному приложению код, позволяющий получать возможности каждого адаптера нашей системы. Мы не будем добавлять список возможностей к дереву из-за большого их числа (существуют сотни различных возможностей, наличие которых может быть проверено). Проще всего для отображения этих данных использовать многострочное текстовое поле.

Вернемся к режиму проектирования формы и изменим у элемента управления TreeView значение свойства Dock с Fill на Left. Элемент управления по прежнему занимает все окно, так что давайте вдвое уменьшим его ширину. Теперь добавьте к окну текстовое поле (TextBox) и установите значение его свойства Dock равным Fill. Также убедитесь, что значение свойства Multiline равно true, а значение свойства Scrollbars равно Both.

Теперь к приложению необходимо добавить обработчик сообщения, чтобы при выборе адаптера обновлялось содержимое текстового поля с возможностями адаптера. Для этого надо перехватывать событие AfterSelect дерева (я предполагаю, что вы уже знаете как перехватывать события). В функции обработчика сообщений используйте следующий код:

private void treeView1_AfterSelect(object sender,System.Windows.Forms.TreeViewEventArgs e)
{
    if (e.Node.Parent == null) // Корневой узел
    {
        // Получаем возможности устройства для данного узла
        textBox1.Text = e.Node.Text + " Capabilities: \r\n\r\n" + Manager.GetDeviceCaps
            (e.Node.Index, DeviceType.Hardware).ToString().Replace("\n", "\r\n");
    }
}

Как видите, все относительно просто. Для корневых узлов (которые представляют адаптеры), после того, как они выбраны мы вызываем функцию Manager.GetDeviceCaps, передавая ей порядковый номер адаптера данного узла (здесь это то же самое, что индекс узла). Член ToString возвращает очень длинный список всех возможностей данного устройства. Запустив приложение, вы получите результат, показанный на рис. 2.2.


Рис. 2.2. Видеорежимы и возможности устройства

Рис. 2.2. Видеорежимы и возможности устройства


Итак, может поддерживаться очень много различных возможностей, о чем вам сообщает сгенерированный длинный список. В нем перечислено все, что поддерживается устройством. Если вы хотите узнать, поддерживает ли ваше устройство аппаратный туман, смотрите здесь. Если вы хотите узнать максимальное количество одновременно используемых целей визуализации, это тоже здесь. Структура Caps разделяется в основном на две группы элементов. К первой группе относятся логические значения, определяющие поддерживается ли конкретная возможность. Например, значение члена SupportsAlphaCompare должно быть true, если устройство поддерживает альфа-сравнение. Другой класс возможностей возвращает числовые значения, как член MaxActiveLights, который сообщает о максимально возможном количестве активных источников света в сцене.

ИСПОЛЬЗОВАНИЕ CAPS ДЛЯ ОПРЕДЕЛЕНИЯ ВОЗМОЖНОСТЕЙ ФИКСИРОВАННОГО КОНВЕЙЕРА
Большинство перечисленных в структуре Caps возможностей относятся исключительно к фиксированному конвейеру функций (например, член MaxActiveLights). Если вы используете программируемый конвейер, многие из этих возможностей в вашей сцене не применяются. Различия между фиксированным и программируемым конвейерами мы обсудим в последующих главах.

В этой книге мы будем обсуждать отдельные возможности по мере их использования.


netlib.narod.ru< Назад | Оглавление | Далее >

Сайт управляется системой uCoz