В предыдущем уроке мы научились создавать и
отображать простейшие примитивы (треугольники) в двухмерном пространстве. Они
были нам необходимы для наглядного представления настоящего урока. Теперь мы
научимся использовать D3D8 в полноэкранном режиме. Данная тема не освещена в
известных мне источниках, так что надеюсь вам данный урок тоже поможет и будет
полезен.
Для использования D3D8 в полноэкранном режиме нам
необходимо знать, как необходимо производить инициализацию, кроме того, нам
будет необходимо научиться производить обнаружение доступных видео режимов.
Создадим для этого примера и последующей работы
диалоговое окно следующего вида :
здесь мы можем выбирать между режимом отображения
(оконное или полноэкранное) и выбирать размер окна (для оконного) или
разрешение, глубину и частоту обновления экрана (для полноэкранного режима).
Для работы этого диалога нам необходима вызвать
функцию его отображения в функции AppInit () :
создать несколько необходимых переменных, которые
мы будем использовать для хранения информации о том, используем ли мы полный
экран, если НЕТ, то нам понадобятся две переменные для хранения выбраного
размера окна, а если ДА, то струтура для хранения данных об выбранном режиме
экрана :
а также создать для этого диалога функцию
обработки сообщений :
Данная функция обработки весьма простая и я
надеюсь здесь все понятно, единственные важные строки, в которых мы производим
обнаружение доступных нам видеорежимов :
Здесь -
-- мы сначала создаем временный интерфейс D3D8,
необходимый нам для получения информации о доступных видеорежимах (
LPDIRECT3D8 p_d3dt = Direct3DCreate8 (D3D_SDK_VERSION); ), -- затем
получаем общее их количество ( int allVideoModes =
p_d3dt->GetAdapterModeCount (D3DADAPTER_DEFAULT); ), -- и последнее -
для каждого видеорежима мы получаем данные которые его описывают (как то ширина,
высота, глубина цвета - точнее формат поверхности, и частоту обновления) (
p_d3dt->EnumAdapterModes (D3DADAPTER_DEFAULT, i, &d3ddm2); )
потом по полученой информации о формате
поверхности, мы решаем какую глубину цвета это обозначает и затем заносим
полученные данные в список, из которого мы можем его выбрать.
После того как наш диалог отработал, и мы уже
знаем необходимую нам информацию мы переходим к следующему шагу - создание окна.
В зависимости от того, используем ли мы полноэкранный режим или нет, мы должны
создавать окно с разными параметрами :
And also with different parameters we should do
initialization D3D8 :
Здесь нам интересны строчки инициализации
полноэкранного режима.
-- сначала устанавливаем ширину и высоту экрана,
-- количество вторичных буферов, -- частоту обновления экрана,
-- потом устанавливаем флаг того, что мы не будем
использовать оконное приложение ( d3dpp.Windowed = false; // !
isFullScreen ) -- и задаем формат, нам необходимый, -- и метод
обновления экрана.