Приложение 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?