Инициализация DirectX:InitDevice
Итак, продолжаем наполнять наше приложение новым кодом. Теперь нужно инициализировать собственно DirectX, так чтобы в нашем окне вообще что-то отображалось. Сечас нам предстоит сделать InitDevice. Хорошая новость заключается в том, что ранее мы просто сделали окно, а вот дальнейший код приведет к тому, что включится ваш видео ускоритель. Начнем рассмотрение функции InitDevice. Прежде чем получить доступ к корневому объекту ID3D11Device– Direct3D устройству, а также к второму корневому объекту ID3D11DeviceContext – Direct3D контексту, разберемся вообще вархитектуреDirect3D версии 11. В этой версии рисование при вызове функций ID3D11DeviceContext::Draw осуществляется не куда-то, что задано по умолчанию – то есть на экран или в окно, — в версии DirectX11 нужно прежде всего задать куда именно Итак, при инициализации устройства Direct3D11 мы должны сделать несколько операций: создать объект g_pd3dDevice, создать объект g_pImmediateContext, создать рендер-таргетg_pRenderTargetView, указать 3d устройству что именно этот рендер-таргет используется для рисования в него любых примитив, а также создать объект «копировалку» g_pSwapChain с рендер-таргета на окно, то есть на экран. В последующем в программе мы уже не будем для рисования обращаться к рендер-таргету, для рисования будем использовать только ID3D11DeviceContext::Draw и затем отображать на экране при помощи g_pSwapChain::Present. Итак, создадим главные объекты, устройство и контекст:
Обратите внимание, что при создании объекта функцией D3D11CreateDeviceAndSwapChain также автоматически создается контекст и цепочка обмена. Обратите внимание на объект g_pImmediateContext, данный объект имеет очень важно значение, так как многие методы перенесены в него, так что вы будете часто в приложении обращаться к этому объекту для выполнения тех или иных действий Direct3D. Также обратите внимание на обширное количество параметров структуры sd. Эти параметры, как нетрудно догадаться, и есть параметры инициализации адаптера и Direct3D – то есть, формат пикселей, геометрические размеры окна, частота кадров и т.п. Вообще, в структуре DXGI_SWAP_CHAIN_DESC еще больше параметров, и возможно, какие-то вам пригодятся для того чтобы устанавливать различные режимы отображения и работы DirectX. В более ранних версиях DirectX также были многочисленные параметры, используемые при инициализации Direct3D устройства. Итак, мы создали главный объект, контекст и цепочку обмена, осталось только создать рендер-тергет и указать DirectX, что он предназначен для рисования. Создаем рендер-таргет:
Указываем Direct3D, что этот рендер-таргет надо использовать по умолчанию и что именно в него и надо всё рисовать:
Теперь настало время узнать о самом интересном, как собственно рисовать, то есть разберем функцию Render. А потом посмотрим на то, как перехватывать сообщения от клавиатуры, чтобы мы имели возможность управления нашим приложением, и главное, монстрами. ©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.
|