Приложение MFC D3D: руководство по Direct3D часть I - Класс CXD3D

ОГЛАВЛЕНИЕ

Класс CXD3D

CD3DWnd – базовый класс для элемента управления в форме, например, графическое окно. Элемент управления будет функционировать как обычный CWnd и предоставлять его свойства CXD3D с помощью дескриптора окна визуализации, вызывать несколько функций, чтобы запустить Direct3D, и переопределить несколько методов, чтобы отобразить сцену.

Рассмотрим класс CXD3D:

//---------------------------------------------------------
// класс CXD3D: класс, класс вида будет порожден, чтобы
// предоставить дескриптор окна для построения изображения, и это
// переопределит отрисовку трехмерной сцены.
//---------------------------------------------------------
class CXD3D
{
protected:
    // внутренние переменные состояния

    bool m_bActive; // переключен на паузу, может быть запрошен после
                    // инициализации, чтобы вызвать CreateD3D
 
    bool m_bStartFullscreen; // запрашивается при
                             // ChooseInitialSettings
 
    bool m_bShowCursor;   // в полноэкранном режиме
    bool m_bClipCursor;   // в полноэкранном режиме

    bool m_bWindowed;   // запрашивается при
                        // BuildPresentParamsFromSettings

   
    bool m_bIgnoreSizeChange; // запрашивается при
                              // HandlePossibleSizeChange
   
    bool m_bDeviceLost;            // успех для: существующих
    bool m_bDeviceObjectsInited;   // InitDeviceObjects и
    bool m_bDeviceObjectsRestored; // RestoreDeviceObjects
 
    // внутренние переменные расчета времени

    FLOAT m_fTime;        // абсолютное время выполнения
    FLOAT m_fElapsedTime; // истекшее время
    FLOAT m_fFPS;         // показатель числа кадров в секунду
 
    // статистика

    TCHAR m_strDeviceStats[256]; // описание устройства
    TCHAR m_strFrameStats[16];   // число кадров в секунду
 
    // главные объекты D3D

    HWND m_hWndRender; // окно устройства
    HWND m_hWndFocus;  // активное окно с фокусом ввода

    LPDIRECT3D9           m_pd3d;       // главный объект D3D
    LPDIRECT3DDEVICE9     m_pd3dDevice; // устройство визуализации
    D3DPRESENT_PARAMETERS m_d3dpp;      // существующие параметры
 
    DWORD m_dwCreateFlags; // программная/аппаратная обработка вершин + чистое устройство

    DWORD m_dwWindowStyle; // сохранено для переключателей режимов
 
    RECT m_rcWindow;   // прямоугольники окна и клиента,
    RECT m_rcClient;   // сохранено для переключателей режимов
 
    // объекты настройки

    CXD3DEnum Enumeration;   // адаптеры, режимы, и т.д.
    CXD3DSettings Settings;  // текущие настройки дисплея
...
};

Пока не пытайтесь освоить все. Начнем с нескольких указателей о флагах состояния. Большинство из них легко освоить, но я подробно расскажу о некоторых из них.

Активный флаг запрашивается видом после инициализации, чтобы запустить CXD3D::CreateD3D. Полноэкранный запуск и оконные флаги могут выглядеть несколько противоречивыми. Пока просто примите, что существует много ситуаций, в которых приложению Direct3D может потребоваться переключаться из полноэкранного в оконный режим и обратно. Флаг ограничения курсора (в полноэкранном режиме) задает, запирает ли приложение курсора в однобуферной прорисовке, в случае, если рабочий стол пользовательского ПК заполняет несколько мониторов. Флаг может игнорировать изменения размера, когда установлен в “ложь” (настройка по умолчанию), позволит программе с оконным интерфейсом сбрасывать среду Direct3D, когда пользователь меняет размер окна.

В остальном, последние три флага состояния относятся к устройству, что означает устройство Direct3D. Что такое устройство Direct3D?