とりあえず画面クリアまでのコードを書いた。
RenderTargetViewを作れば画面クリアができるようになる。RenderTargetView作成に至るまでの各インターフェースの関係などまだ理解していない部分がかなりある。以下初期化部分のコード。
virtual void create_device(){
HRESULT hr = S_OK;
//ウィンドウの現在の幅、高さを求める
//RECT rc;
//GetClientRect( hwnd_, &rc );
//uint32_t width = rc.right - rc.left;
//uint32_t height = rc.bottom - rc.top;
// アダプタデバイス情報の取得
//LARGE_INTEGER version;
THROW_IFERR(dxgi_factory_->EnumAdapters1(0,&adapter_));
//THROW_IFERR(adapter_->CheckInterfaceSupport( __uuidof(ID3D10Device),&version));
// D3DDeviceの作成
std::vector<D3D_FEATURE_LEVEL> feature_levels =
boost::assign::list_of<D3D_FEATURE_LEVEL>
(D3D_FEATURE_LEVEL_11_0 ) // DirectX11対応GPU
(D3D_FEATURE_LEVEL_10_1) // DirectX10.1対応GPU
(D3D_FEATURE_LEVEL_10_0 ); // DirectX10対応GPU
D3D_FEATURE_LEVEL level;
THROW_IFERR(::D3D11CreateDevice(
adapter_,
D3D_DRIVER_TYPE_UNKNOWN ,
NULL,
D3D11_CREATE_DEVICE_BGRA_SUPPORT,
&feature_levels[0],
feature_levels.size(),
D3D11_SDK_VERSION,
&d3d_device_,
&level,
&d3d_context_));
THROW_IFERR(adapter_->EnumOutputs(0,&output_));
// 表示モード
DXGI_MODE_DESC desired_desc = {} , actual_desc = {};
// 各色8ビットで符号化なし正規化数
desired_desc.Format = DXGI_FORMAT_B8G8R8A8_UNORM;
desired_desc.Height = 480;// 高さ
desired_desc.Width = 640;// 幅
desired_desc.Scaling = DXGI_MODE_SCALING_CENTERED;// スケーリングなし
// リフレッシュレートを60Hzを要求する
desired_desc.RefreshRate.Numerator = 60000;
desired_desc.RefreshRate.Denominator = 1000;
// 近いモードを検索
output_->FindClosestMatchingMode(&desired_desc,&actual_desc,d3d_device_);
// スワップチェーンの作成
{
DXGI_SWAP_CHAIN_DESC desc = {};
desc.BufferDesc = actual_desc;
desc.SampleDesc.Count = 1;
desc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
desc.BufferCount = 1;
desc.OutputWindow = hwnd_;
desc.SwapEffect = DXGI_SWAP_EFFECT_DISCARD;
desc.Windowed = TRUE;
desc.Flags = DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH;
THROW_IFERR(dxgi_factory_->CreateSwapChain(d3d_device_,&desc,&swap_chain_));
}
// ビューの作成
THROW_IFERR(swap_chain_->GetBuffer(0,texture_.GetIID(),(void**)&texture_));
THROW_IFERR(d3d_device_->CreateRenderTargetView(texture_,0,&view_));
}
もうちょっとでポリゴンを描けるようになる。