Конгер Д.
Физика для разработчиков компьютерных игр
стр. 45

Если Windows успешно создает окно программы, функция AppMain () вызывает функцию PreD3DInitialization(). PreD3DInitializati-on () - это еще одна функция, которая нужна платформе, но должна быть предоставлена вашей игрой. Если в игре не будет функции PreD3DIniti-alization(), ее не удастся скомпилировать. Эта функция предоставляет игре возможность выполнить все операции, которые ей нужно выполнить до инициализации Direct3D. Функция возвращает TRUE, если она выполнилась успешно, и FALSE, если нет. Если вашей игре не нужно выполнять никаких действий, прежде чем инициализировать Direct3D, функция PreD3DInitialization() должна просто возвращать TRUE.

Далее функция AppMain () инициализирует Direct3D, вызывая функцию платформы InitD3D (). Эта функция рассматривается в следующем разделе. Если InitD3D() удается инициализировать Direct3D, она возвращает значение S_OK - стандартный код состояния в Windows. Если почему-либо инициализация не удается, InitD3D() возвращает значение E_FAIL - код ошибки в Windows.

Проинициализировав Direct3D, функция AppMain () вызывает функцию PostD3DInitialization (). Эту функцию тоже должна предоставлять игра. В ней можно выполнять любые нужные игре действия.

В строках 69-81 функция AppMain () выполняет стандартные для Windows-программ операции. Она отображает окно программы и запускает цикл обработки сообщений. Если сообщений, ожидающих обработки, нет, то функция AppMain () вызывает функцию UpdateFrame (). Именно в этой функции выполняются все операции, необходимые для рисования изображения. Собственно сцена рисуется вызовом функции Render () в строке 85 листинга 2.3. Эта функция вызывает функцию RenderFrame (), которую должна предоставлять игра.

ИНИЦИАЛИЗАЦИЯ DIRECT3D

Инициализацию Direct3D в платформе выполняет функция InitD3D (). Ее код приведен в листинге 2.4.

Листинг 2.4. Функция lnitD3D()

1    HRESULT InitD3D(HWND hWnd)

2    {

3    HRESULT hr = S_OK;

4    D3DPRESENT_PARAMETERS d3dpp;

5

6    // Создаем объект Direct3D.

7    if((theApp.direct3D    =

8    Direct3DCreate 9(D3D_SDKJVERSION))—NULL)

9    {

10    // Если объект не удалось создать...

11    hr = E_FAIL;

12    }



Новости
Геймеры собирают деньги на помощь русским сиротам
Сервис Humble Store и компания Tripwire Interactive поддержат организацию Change30. Британцы предоставляют помощь русским сиротам.
Слух: На E3 2018 покажут Cyberpunk 2077
Крупное польское видеоигровое издание GRYOnline сообщило о том, что, согласно их собственным источникам в компании, CD Projekt Red готовит к E3 2018 новый трейлер Cyberpunk 2077.