Это второй урок из серии “ Программирование с использованием DirectX под C# “. Возможно вам будет сперва интереснее ознакомиться с предыдущей частью – Установка среды разработки и открытие окна

В этой части мы будем создавать устройство. Если коротко, устройство – это прямая связь с вашим графическим адаптером, объект, который дает вам прямую связь с видео картой, скрытой в глубине вашего системного блока.

Для начала просто создайте следующую переменную внутри вашего WinForm класса:

1
private Device device ;

Далее мы создадим процедуру, которая активирует устройство. Я объясню ее работу позже.

1
2
3
4
5
6
7
8
public void InitializeDevice ( )
  {
      PresentParameters presentParams = new PresentParameters ( ) ;
      presentParams . Windowed = true ;
      presentParams . SwapEffect = SwapEffect . Discard ;
      device = new Device ( 0 , DeviceType . Hardware , this , CreateFlags . SoftwareVertexProcessing , presentParams ) ;
  }

Первая строка создает Presentation Parameters, которые задают поведение устройства. Второй строкой мы задаем работу устройства в окне, а третьей – отсутствие двойного буффера. Двойной буффер используется в более сложных приложениях для нивелирования эффекта “моргания”, который может возникнуть при частой смене изображения в кадре.

Последней строкой мы создаем само устройство. Давайте рассмотрим параметры, которые передаются конструктору устройства:

  • 0 – выбирается первый графический адаптер в вашей системе
  • DeviceType.Hardware – мы задаем рендеринг с помощью графической карты. Если вы не имеете графического ускорителя (что весьма мало вероятно) или хотите использовать софтварный режим, то введите тут DeviceType.Reference, который полностью поддерживает DirectX, но работает намного медленнее
  • this – передаем это форму, чтобы вся отрисовка проводилась в ней. Более об этом в следующей главе
  • в завершении передаем наши параметры  presentParams и устройство создано.

Само собой, что необходимо также вызвать исполнение кода процедуры:

1
Form1 . InitializeDevice ( ) ;

Если при компиляции текущего проекта, вы получаете следующую ошибку: “The type or namespace name ‘DirectX’ does not exist in the namespace”, значит вам необходимо добавить ссылки на Microsoft.DirectX и Microsoft.Direct3D в проект.

При исполнении кода вы не заметите внешних отличий от результатов предыдущего урока, но устройство было инициировано! следующим шагом будет перезапись метода OnPaint формы:

1
2
3
4
5
protected override void OnPaint ( System . Windows . Forms . PaintEventArgs e )
  {
      device . Clear ( ClearFlags . Target , Color . DarkSlateBlue , 1 . 0f , 0 ) ;
      device . Present ( ) ;
  }

Этот метод вызывается каждый раз, когда что-то рисуется на форме. Метод Clear очищает всю область формы и заполняет ее DarkSlateBlue цветом. Флаг ClearFlags показывает, что очищаться будет основное окно. Present запускает обновление экрана, без него вы не увидите никаких изменений. Этот метод должен выполняться по завершении OnPaint.

Если вы запустите вашу программу сейчас, то вы увидите, что ваша форма стала синего цвета – это и есть вывод DirectX. Для еще более потрясающего эффекта, продолжайте чтение !