Шаг 7 - Полноэкранный режим

Обычно все игры, особенно 3d, делают в полноэкранном режиме, т.к. наибольшая производительность видеокарты происходит именно в этом режиме. Во времена DOS-а, это был самый лучший режим, но когда появился Windows 3.1 и начало эры Windows 95, то игр было очень мало, т.к. они плохо работали в оконном режиме, что было невозможно играть. Но DirectX3 все это наладил и позволил разработчикам использовать этот уникальный режим. Сейчас, в полноэкранном режиме с разрешениями от 640x480 до 1920х1280 и выше с 16-24-32 битами никого не удивишь, а раньше это было что-то, даже представить себе не могли... как в каменном веке жили ;), хорошо что эти "века" в компьютерном мире пролетают гораздо быстрее...

А теперь, собственно, возвращаемся назад, к теме. Для того, чтобы инициализировать полноэкранный режим, нам нужно приложить немного усилий и мы этим сейчас и займемся. Там где мы регистрировали класс и на основе его создавали окно, нужно поменять одну строчку, на данный момент она у Вас выглядит:

hWnd = CreateWindowEx (
	WS_EX_TOPMOST,
	APPNAME,
	APPTITLE,
	WS_OVERLAPPEDWINDOW,
	0, 0, 
	640,
	480,
	NULL,
	NULL,
	hThisInst,
	NULL);

Вместо WS_OVERLAPPEDWINDOW указываем WS_POPUP. Если Вам эти параметры не понятны, смотрите раздел MFC, я лишь здесь коротко скажу, что эти флажки делают различные окна (перекрываемое окно (обычное) и окно, которое ничего не содержит, т.е. нет кнопок свертывания, закрытия, меню и т.д., также есть и другие виды окон) и вместо 640, 480 ставим свой любимый режим, у меня 1024x768. Переходим в AppInit() и устанавим вручную параметры дисплея. После функции ZeroMemory() добавьте:

d3dpp.BackBufferWidth = 1024;
d3dpp.BackBufferHeight = 768;
d3dpp.BackBufferCount = 3;
d3dpp.FullScreen_RefreshRateInHz = 100;

Это мы задали ширину и высоту экрана, которые также присваивали в CreateWindowEx(). Будет у нас 3 задних буфера и выставим частоту равную 100 Mhz. Здесь я дам один совет, если Вы частоту режимов поставили жестко, менее, скажем, 100 не работать, то здесь Вам нужно указать тоже не менее 100 Mhz, иначе приложение не будет работать. Если у кого-то монитор не поддерживает данную частоту в этом режиме, можете заменить ее на 85 или менее...

В d3dpp.Windowed = true; вместо true ставим false, используем полноэкранный режим. Строку:

d3dpp.BackBufferFormat = d3ddm.Format;

оставьте неизменной и ни в коем случае не ставьте, скажем, параметр D3DFMT_A8R8G8B8 (32 битный ARGB пиксельный формат, с поддержкой альфа канала) или другой, об этом Вы узнаете в "Шаг 8 - Потеря устройств при нажатии клавиш Alt+TAB". Все, полноэкранный режим инициализирован и, если Вы сейчас попытаетесь скомпилировать и запустить, то Вы все это увидите, но... не сможете закрыть... поэтому придется добавить событие, чтобы при любой клавише данное приложение закрывалось автоматически, добавьте в WindowProc в switch:

case WM_CHAR:
	PostQuitMessage (0);
	break;

Вот теперь компилируйте и запускайте :)


Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Хавов Евгений Валерьевич - 10.08.2002