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

Автоматический сброс устройства при изменении размеров

Любой, кто когда-нибудь писал Direct3D-приложения на C++ или Visual Basic знает, что обычно при изменении размеров окна приложения необходимо выполнить сброс устройства, иначе Direct3D продолжит визуализацию сцены с разрешением, установленным при создании устройства, а полученное изображение при копировании будет сжато или растянуто, чтобы соответствовать новым размерам окна. DirectX для управляемого кода достаточно умен, чтобы определить, когда вы создаете устройство с элементом управления Windows Forms, и может автоматически выполнить сборс устройства при изменении размеров этого элемента управления. Естественно, вы легко можете вернуться к обычному поведению и обрабатывать сброс устройства самостоятельно. Для этого есть событие устройства DeviceResizing, происходящее каждый раз перед вызовом кода автоматического сброса устройства. Перехватив это событие и присвоив члену Cancel переданного класса EventArgs значение true, вы возвращаете поведение по умолчанию. Добавьте к примеру следующую функцию:

private void CancelResize(object sender, CancelEventArgs e)
{
    e.Cancel = true;
}

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

device.DeviceResizing += new CancelEventHandler(this.CancelResize);

Запустите приложение еще раз и разверните его окно на весь экран. Легко заметить, что треугольник остался тем же, но выглядит ужасающе. Зазубренные края, и это еще не самое худшее. Уберите два последних изменения в коде. Поведение по умолчанию в DirectX для управляемого кода обрабатывает изменения размера устройства за вас, и мы можем пользоваться этим преимуществом.


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

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