Nanashi-soft○プログラマ専用○DirectX11開発○
//デバイスの生成
HRESULT hr;
ID3D11Device* hpDevice = NULL;
ID3D11DeviceContext* hpDeviceContext = NULL;
hr = D3D11CreateDevice(
NULL,
D3D_DRIVER_TYPE_HARDWARE,
NULL,
0,
NULL,
0,
D3D11_SDK_VERSION,
&hpDevice,
NULL,
&hpDeviceContext);
if(FAILED(hr)){
MessageBoxW(hWnd, L"D3D11CreateDevice", L"Err", MB_ICONSTOP);
goto End;
}
//使用可能なMSAAを取得
DXGI_SAMPLE_DESC MSAA;
for(int i=0; i <= D3D11_MAX_MULTISAMPLE_SAMPLE_COUNT; i++){
UINT Quality;
if SUCCEEDED(hpDevice->CheckMultisampleQualityLevels(DXGI_FORMAT_D24_UNORM_S8_UINT, i, &Quality)){
if(0 < Quality){
MSAA.Count = i;
MSAA.Quality = Quality - 1;
}
}
}
//インターフェース取得
IDXGIDevice1* hpDXGI = NULL;
if(FAILED(hpDevice->QueryInterface(__uuidof(IDXGIDevice1), (void**)&hpDXGI))){
MessageBoxW(hWnd, L"QueryInterface", L"Err", MB_ICONSTOP);
goto End;
}
//アダプター取得
IDXGIAdapter* hpAdapter = NULL;
if(FAILED(hpDXGI->GetAdapter(&hpAdapter))){
MessageBoxW(hWnd, L"GetAdapter", L"Err", MB_ICONSTOP);
goto End;
}
//ファクトリー取得
IDXGIFactory* hpDXGIFactory = NULL;
hpAdapter->GetParent(__uuidof(IDXGIFactory), (void**)&hpDXGIFactory);
if(hpDXGIFactory == NULL){
MessageBoxW(hWnd, L"GetParent", L"Err", MB_ICONSTOP);
goto End;
}
//スワップチェイン作成
IDXGISwapChain* hpDXGISwpChain = NULL;
DXGI_SWAP_CHAIN_DESC hDXGISwapChainDesc;
hDXGISwapChainDesc.BufferDesc.Width = 1980;
hDXGISwapChainDesc.BufferDesc.Height = 1080;
hDXGISwapChainDesc.BufferDesc.RefreshRate.Numerator = 0;
hDXGISwapChainDesc.BufferDesc.RefreshRate.Denominator = 1;
hDXGISwapChainDesc.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM_SRGB;
hDXGISwapChainDesc.BufferDesc.ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED;
hDXGISwapChainDesc.BufferDesc.Scaling = DXGI_MODE_SCALING_UNSPECIFIED;
hDXGISwapChainDesc.SampleDesc = MSAA;
hDXGISwapChainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
hDXGISwapChainDesc.BufferCount = 1;
hDXGISwapChainDesc.OutputWindow = hWnd;
hDXGISwapChainDesc.Windowed = TRUE;
hDXGISwapChainDesc.SwapEffect = DXGI_SWAP_EFFECT_DISCARD;
hDXGISwapChainDesc.Flags = DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH;
if(FAILED(hpDXGIFactory->CreateSwapChain(hpDevice, &hDXGISwapChainDesc, &hpDXGISwpChain))){
MessageBoxW(hWnd, L"CreateSwapChain", L"Err", MB_ICONSTOP);
goto End;
}