virtual void discard_device()
{
+ safe_release(view_);
+ safe_release(texture_);
safe_release(render_target_);
safe_release(swap_chain_);
safe_release(d3d_context_);
}
virtual void create_device(){
- // 入力_.reset(new input(HINST_THISCOMPONENT,hwnd_));
HRESULT hr = S_OK;
//ウィンドウの現在の幅、高さを求める
-
- RECT rc;
- GetClientRect( hwnd_, &rc );
- uint32_t width = rc.right - rc.left;
- uint32_t height = rc.bottom - rc.top;
+ //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_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(
&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.Width = width;
- desc.BufferDesc.Height = height;
- desc.BufferDesc.Format = DXGI_FORMAT_B8G8R8A8_UNORM;
- 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.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_));
- //wic_imaging_factory_.CreateInstance(CLSID_WICImagingFactory);
- // bitmap_ = load_bitmap_from_file(render_target_,wic_imaging_factory_,L"myship.png");
+
}
- // DXGIスワップチェーンの作成(デフォルトアダプタ)
-
- //if(!render_target_)
- //{
- // RECT rc;
- // GetClientRect(hwnd_, &rc);
-
- // D2D1_SIZE_U size = D2D1::SizeU(
- // rc.right - rc.left,
- // rc.bottom - rc.top
- // );
- //
- // const D2D1_PIXEL_FORMAT format =
- // D2D1::PixelFormat(DXGI_FORMAT_B8G8R8A8_UNORM,
- // D2D1_ALPHA_MODE_PREMULTIPLIED);
- //
- // const D2D1_RENDER_TARGET_PROPERTIES target_prop =
- // D2D1::RenderTargetProperties(D2D1_RENDER_TARGET_TYPE_DEFAULT,format);
-
- // THROW_IFERR(factory_->CreateHwndRenderTarget(
- // target_prop,
- // D2D1::HwndRenderTargetProperties(hwnd_, size,D2D1_PRESENT_OPTIONS_IMMEDIATELY),
- // &render_target_
- // ));
- // // Create a DC render target
- // //D2D1_RENDER_TARGET_PROPERTIES props = D2D1::RenderTargetProperties(
- // // D2D1_RENDER_TARGET_TYPE_DEFAULT,
- // // D2D1::PixelFormat(
- // // DXGI_FORMAT_B8G8R8A8_UNORM,
- // // D2D1_ALPHA_MODE_IGNORE
- // // ) , 0.0, 0.0,
- // // D2D1_RENDER_TARGET_USAGE_GDI_COMPATIBLE
- // // );
-
- // //THROW_IFERR(factory_->CreateDCRenderTarget(
- // // &props,
- // // &render_target_
- // // ));
- //}
+ // ビューの作成
+ THROW_IFERR(swap_chain_->GetBuffer(0,texture_.GetIID(),(void**)&texture_));
+ THROW_IFERR(d3d_device_->CreateRenderTargetView(texture_,0,&view_));
}
virtual void create_device_independent_resources()
static int t = 0;
if(swap_chain_)
{
+ float color[4] = { 0.7f, 0.0f, 0.0f, 1.0f };
+ d3d_context_->ClearRenderTargetView(view_,color);
swap_chain_->Present(0,0);
}
IDXGIFactory1Ptr dxgi_factory_;
IDXGIAdapter1Ptr adapter_;
+ IDXGIOutputPtr output_;
ID3D11DevicePtr d3d_device_;
ID3D11DeviceContextPtr d3d_context_;
+ ID3D11Texture2DPtr texture_;
+ ID3D11RenderTargetViewPtr view_;
//IDXGISwapChainPtr;
ID2D1FactoryPtr factory_;