+ // バーテックスシェーダのコンパイル\r
+ ID3DBlobPtr vsblob,vserrblob;\r
+ DWORD compile_flag = D3DCOMPILE_ENABLE_STRICTNESS;\r
+#if defined( DEBUG ) || defined( _DEBUG )\r
+ compile_flag |= D3DCOMPILE_DEBUG;\r
+#endif\r
+\r
+ HRESULT hr = D3DCompileFromFile\r
+ (\r
+ L"dxgi_test.fx", NULL,D3D_COMPILE_STANDARD_FILE_INCLUDE , "VS", "vs_5_0", \r
+ compile_flag, 0, &vsblob, &vserrblob );\r
+ if( FAILED( hr ) )\r
+ {\r
+ if( vserrblob != NULL )\r
+ OutputDebugStringA( (char*)vserrblob->GetBufferPointer() );\r
+ if( vserrblob ) vserrblob.Reset();\r
+ throw sf::win32_error_exception(hr);\r
+ }\r
+\r
+ // バーテックスシェーダの生成\r
+ THROW_IFERR(d3d_device_->CreateVertexShader( vsblob->GetBufferPointer(), vsblob->GetBufferSize(), NULL, &v_shader_ ));\r
+\r
+ // 入力頂点レイアウトの定義\r
+ D3D11_INPUT_ELEMENT_DESC\r
+ layout[] = {\r
+ { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 },\r
+ { "NORMAL", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 },\r
+ { "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }};\r
+ ;\r
+\r
+ // 入力頂点レイアウトの生成\r
+ THROW_IFERR(d3d_device_->CreateInputLayout( layout, ARRAYSIZE(layout), vsblob->GetBufferPointer(),\r
+ vsblob->GetBufferSize(), &input_layout_ ));\r
+ vsblob.Reset();\r
+ }\r
+\r
+ // 入力レイアウトの設定\r
+ d3d_context_->IASetInputLayout( input_layout_.Get() );\r
+\r
+ // ピクセル・シェーダーのコンパイル\r
+ {\r
+ ID3DBlobPtr psblob,pserror;\r
+ DWORD compile_flag = D3DCOMPILE_ENABLE_STRICTNESS;\r
+#if defined( DEBUG ) || defined( _DEBUG )\r
+ compile_flag |= D3DCOMPILE_DEBUG;\r
+#endif\r
+ HRESULT hr = D3DCompileFromFile( L"dxgi_test.fx", NULL, D3D_COMPILE_STANDARD_FILE_INCLUDE, "PS", "ps_5_0", \r
+ compile_flag, 0, &psblob, &pserror);\r
+ if( FAILED( hr ) )\r
+ {\r
+ if( pserror != NULL )\r
+ OutputDebugStringA( (char*)pserror->GetBufferPointer() );\r
+ safe_release(pserror);\r
+ throw sf::win32_error_exception(hr);\r
+ }\r
+\r
+ // ピクセルシェーダの作成\r
+ THROW_IFERR(d3d_device_->CreatePixelShader( psblob->GetBufferPointer(), psblob->GetBufferSize(), NULL, &p_shader_ ));\r
+\r
+ psblob.Reset();\r
+ }\r
+\r
+ // バーテックスバッファの作成\r
+ // Create vertex buffer\r
+ simple_vertex vertices[] =\r
+ {\r
+ { XMFLOAT3( 0.0f, 0.0f,0.0f ),XMFLOAT3( 0.0f, 0.0f, -1.0f ) , XMFLOAT2( 0.0f, 0.0f ) },\r
+ { XMFLOAT3( 640.0f, 0.0f, 0.0f ),XMFLOAT3( 0.0f, 0.0f, -1.0f ), XMFLOAT2( 1.0f, 0.0f ) },\r
+ { XMFLOAT3( 0.0f, 480.0f, 0.0f ),XMFLOAT3( 0.0f, 0.0f, -1.0f ) , XMFLOAT2( 0.0f, 1.0f ) },\r
+ { XMFLOAT3( 640.0f, 480.0f, 0.0f ),XMFLOAT3( 0.0f, 0.0f, -1.0f ), XMFLOAT2( 1.0f, 1.0f ) }\r
+\r
+ //{ XMFLOAT3( -1.0f, -1.0f, 2.0f ),XMFLOAT3( 0.0f, 0.0f, -1.0f ) , XMFLOAT2( 1.0f, 1.0f ) },\r
+ //{ XMFLOAT3( 1.0f, -1.0f, 2.0f ),XMFLOAT3( 0.0f, 0.0f, -1.0f ), XMFLOAT2( 0.0f, 1.0f ) },\r
+ //{ XMFLOAT3( -1.0f, 1.0f, 2.0f ),XMFLOAT3( 0.0f, 0.0f, -1.0f ) , XMFLOAT2( 1.0f, 0.0f ) },\r
+ //{ XMFLOAT3( 1.0f, 1.0f, 2.0f ),XMFLOAT3( 0.0f, 0.0f, -1.0f ), XMFLOAT2( 0.0f, 0.0f ) }\r
+ // ---------------------\r
+ //{ XMFLOAT3( -1.0f, 1.0f, -1.0f ), XMFLOAT3( 0.0f, 1.0f, 0.0f ),XMFLOAT2( 0.0f, 0.0f ) },\r
+ //{ XMFLOAT3( 1.0f, 1.0f, -1.0f ),XMFLOAT3( 0.0f, 1.0f, 0.0f ), XMFLOAT2( 1.0f, 0.0f ) },\r
+ //{ XMFLOAT3( 1.0f, 1.0f, 1.0f ),XMFLOAT3( 0.0f, 1.0f, 0.0f ), XMFLOAT2( 1.0f, 1.0f ) },\r
+ //{ XMFLOAT3( -1.0f, 1.0f, 1.0f ), XMFLOAT3( 0.0f, 1.0f, 0.0f ) ,XMFLOAT2( 0.0f, 1.0f ) },\r
+\r
+ //{ XMFLOAT3( -1.0f, -1.0f, -1.0f ),XMFLOAT3( 0.0f, -1.0f, 0.0f ), XMFLOAT2( 0.0f, 0.0f ) },\r
+ //{ XMFLOAT3( 1.0f, -1.0f, -1.0f ), XMFLOAT3( 0.0f, -1.0f, 0.0f ) ,XMFLOAT2( 1.0f, 0.0f ) },\r
+ //{ XMFLOAT3( 1.0f, -1.0f, 1.0f ), XMFLOAT3( 0.0f, -1.0f, 0.0f ) , XMFLOAT2( 1.0f, 1.0f ) },\r
+ //{ XMFLOAT3( -1.0f, -1.0f, 1.0f ), XMFLOAT3( 0.0f, -1.0f, 0.0f ),XMFLOAT2( 0.0f, 1.0f ) },\r
+\r
+ //{ XMFLOAT3( -1.0f, -1.0f, 1.0f ),XMFLOAT3( -1.0f, 0.0f, 0.0f ) , XMFLOAT2( 0.0f, 0.0f ) },\r
+ //{ XMFLOAT3( -1.0f, -1.0f, -1.0f ),XMFLOAT3( -1.0f, 0.0f, 0.0f ), XMFLOAT2( 1.0f, 0.0f ) },\r
+ //{ XMFLOAT3( -1.0f, 1.0f, -1.0f ), XMFLOAT3( -1.0f, 0.0f, 0.0f ),XMFLOAT2( 1.0f, 1.0f ) },\r
+ //{ XMFLOAT3( -1.0f, 1.0f, 1.0f ),XMFLOAT3( -1.0f, 0.0f, 0.0f ), XMFLOAT2( 0.0f, 1.0f ) },\r
+\r
+ //{ XMFLOAT3( 1.0f, -1.0f, 1.0f ),XMFLOAT3( 1.0f, 0.0f, 0.0f ), XMFLOAT2( 0.0f, 0.0f ) },\r
+ //{ XMFLOAT3( 1.0f, -1.0f, -1.0f ),XMFLOAT3( 1.0f, 0.0f, 0.0f ), XMFLOAT2( 1.0f, 0.0f ) },\r
+ //{ XMFLOAT3( 1.0f, 1.0f, -1.0f ),XMFLOAT3( 1.0f, 0.0f, 0.0f ), XMFLOAT2( 1.0f, 1.0f ) },\r
+ //{ XMFLOAT3( 1.0f, 1.0f, 1.0f ),XMFLOAT3( 1.0f, 0.0f, 0.0f ), XMFLOAT2( 0.0f, 1.0f ) },\r
+\r
+ //{ XMFLOAT3( -1.0f, -1.0f, -1.0f ),XMFLOAT3( 0.0f, 0.0f, -1.0f ) , XMFLOAT2( 0.0f, 0.0f ) },\r
+ //{ XMFLOAT3( 1.0f, -1.0f, -1.0f ),XMFLOAT3( 0.0f, 0.0f, -1.0f ), XMFLOAT2( 1.0f, 0.0f ) },\r
+ //{ XMFLOAT3( 1.0f, 1.0f, -1.0f ),XMFLOAT3( 0.0f, 0.0f, -1.0f ), XMFLOAT2( 1.0f, 1.0f ) },\r
+ //{ XMFLOAT3( -1.0f, 1.0f, -1.0f ),XMFLOAT3( 0.0f, 0.0f, -1.0f ) , XMFLOAT2( 0.0f, 1.0f ) },\r
+\r
+ //{ XMFLOAT3( -1.0f, -1.0f, 1.0f ), XMFLOAT3( 0.0f, 0.0f, 1.0f ) , XMFLOAT2( 0.0f, 0.0f ) },\r
+ //{ XMFLOAT3( 1.0f, -1.0f, 1.0f ), XMFLOAT3( 0.0f, 0.0f, 1.0f ) , XMFLOAT2( 1.0f, 0.0f ) },\r
+ //{ XMFLOAT3( 1.0f, 1.0f, 1.0f ),XMFLOAT3( 0.0f, 0.0f, 1.0f ), XMFLOAT2( 1.0f, 1.0f ) },\r
+ //{ XMFLOAT3( -1.0f, 1.0f, 1.0f ), XMFLOAT3( 0.0f, 0.0f, 1.0f ),XMFLOAT2( 0.0f, 1.0f ) }\r
+ };\r
+ //std::vector<simple_vertex> vertices = boost::assign::list_of<simple_vertex>\r
+ //\r
+ // ( XMFLOAT3( -1.0f, 1.0f, -1.0f ), XMFLOAT2( 0.0f, 0.0f ) )\r
+ // ( XMFLOAT3( 1.0f, 1.0f, -1.0f ), XMFLOAT2( 1.0f, 0.0f ) )\r
+ // ( XMFLOAT3( 1.0f, 1.0f, 1.0f ), XMFLOAT2( 1.0f, 1.0f ) )\r
+ // ( XMFLOAT3( -1.0f, 1.0f, 1.0f ), XMFLOAT2( 0.0f, 1.0f ) )\r
+\r
+ // ( XMFLOAT3( -1.0f, -1.0f, -1.0f ), XMFLOAT2( 0.0f, 0.0f ) )\r
+ // ( XMFLOAT3( 1.0f, -1.0f, -1.0f ), XMFLOAT2( 1.0f, 0.0f ) )\r
+ // ( XMFLOAT3( 1.0f, -1.0f, 1.0f ), XMFLOAT2( 1.0f, 1.0f ) )\r
+ // ( XMFLOAT3( -1.0f, -1.0f, 1.0f ), XMFLOAT2( 0.0f, 1.0f ) )\r
+\r
+ // ( XMFLOAT3( -1.0f, -1.0f, 1.0f ), XMFLOAT2( 0.0f, 0.0f ) )\r
+ // ( XMFLOAT3( -1.0f, -1.0f, -1.0f ), XMFLOAT2( 1.0f, 0.0f ) )\r
+ // ( XMFLOAT3( -1.0f, 1.0f, -1.0f ), XMFLOAT2( 1.0f, 1.0f ) )\r
+ // ( XMFLOAT3( -1.0f, 1.0f, 1.0f ), XMFLOAT2( 0.0f, 1.0f ) )\r
+\r
+ // ( XMFLOAT3( 1.0f, -1.0f, 1.0f ), XMFLOAT2( 0.0f, 0.0f ) )\r
+ // ( XMFLOAT3( 1.0f, -1.0f, -1.0f ), XMFLOAT2( 1.0f, 0.0f ) )\r
+ // ( XMFLOAT3( 1.0f, 1.0f, -1.0f ), XMFLOAT2( 1.0f, 1.0f ) )\r
+ // ( XMFLOAT3( 1.0f, 1.0f, 1.0f ), XMFLOAT2( 0.0f, 1.0f ) )\r
+\r
+ // ( XMFLOAT3( -1.0f, -1.0f, -1.0f ), XMFLOAT2( 0.0f, 0.0f ) )\r
+ // ( XMFLOAT3( 1.0f, -1.0f, -1.0f ), XMFLOAT2( 1.0f, 0.0f ) )\r
+ // ( XMFLOAT3( 1.0f, 1.0f, -1.0f ), XMFLOAT2( 1.0f, 1.0f ) )\r
+ // ( XMFLOAT3( -1.0f, 1.0f, -1.0f ), XMFLOAT2( 0.0f, 1.0f ) )\r
+\r
+ // ( XMFLOAT3( -1.0f, -1.0f, 1.0f ), XMFLOAT2( 0.0f, 0.0f ) )\r
+ // ( XMFLOAT3( 1.0f, -1.0f, 1.0f ), XMFLOAT2( 1.0f, 0.0f ) )\r
+ // ( XMFLOAT3( 1.0f, 1.0f, 1.0f ), XMFLOAT2( 1.0f, 1.0f ) )\r
+ // ( XMFLOAT3( -1.0f, 1.0f, 1.0f ), XMFLOAT2( 0.0f, 1.0f ) );\r
+\r
+ D3D11_BUFFER_DESC bd = {};\r
+ bd.Usage = D3D11_USAGE_DEFAULT;\r
+ bd.ByteWidth = sizeof( simple_vertex ) * 4;\r
+ bd.BindFlags = D3D11_BIND_VERTEX_BUFFER;\r
+ bd.CPUAccessFlags = 0;\r
+\r
+ D3D11_SUBRESOURCE_DATA init_data = {};\r
+ init_data.pSysMem = vertices;\r
+ THROW_IFERR(d3d_device_->CreateBuffer( &bd, &init_data, &v_buffer_ ));\r
+\r
+ // 頂点バッファのセット\r
+ uint32_t stride = sizeof( simple_vertex );\r
+ uint32_t offset = 0;\r
+ d3d_context_->IASetVertexBuffers( 0, 1, v_buffer_.GetAddressOf(), &stride, &offset );\r
+\r
+ // インデックスバッファの生成\r
+ WORD indices[] =\r
+ {\r
+ 0,1,2,\r
+ 2,3,1\r
+ //3,1,0,\r
+ //2,1,3,\r
+ //6,4,5,\r
+ //7,4,6,\r
+ //11,9,8,\r
+ //10,9,11,\r
+ //14,12,13,\r
+ //15,12,14,\r
+ //19,17,16,\r
+ //18,17,19,\r
+ //22,20,21,\r
+ //23,20,22\r
+ };\r
+\r
+ bd.Usage = D3D11_USAGE_DEFAULT;\r
+ bd.ByteWidth = sizeof( WORD ) * 6;\r
+ bd.BindFlags = D3D11_BIND_INDEX_BUFFER;\r
+ bd.CPUAccessFlags = 0;\r
+ init_data.pSysMem = indices;\r
+ THROW_IFERR(d3d_device_->CreateBuffer( &bd, &init_data, &i_buffer_ ));\r
+\r
+ // インデックスバッファのセット\r
+ d3d_context_->IASetIndexBuffer( i_buffer_.Get(), DXGI_FORMAT_R16_UINT, 0 );\r
+\r
+ // プリミティブの形態を指定する\r
+ d3d_context_->IASetPrimitiveTopology( D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP );\r
+\r
+ // 定数バッファを生成する。\r
+ bd.Usage = D3D11_USAGE_DEFAULT;\r
+ bd.ByteWidth = sizeof(cb_never_changes);\r
+ bd.BindFlags = D3D11_BIND_CONSTANT_BUFFER;\r
+ bd.CPUAccessFlags = 0;\r
+ THROW_IFERR(d3d_device_->CreateBuffer( &bd, NULL, &cb_never_changes_ ));\r
+\r
+ bd.ByteWidth = sizeof(cb_change_on_resize);\r
+ THROW_IFERR(d3d_device_->CreateBuffer( &bd, NULL, &cb_change_on_resize_ ));\r
+\r
+ bd.ByteWidth = sizeof(cb_changes_every_frame);\r
+ THROW_IFERR(d3d_device_->CreateBuffer( &bd, NULL, &cb_changes_every_frame_ ));\r
+\r
+ // テクスチャのロード\r
+ ID3D11ResourcePtr ptr;\r
+ THROW_IFERR(CreateDDSTextureFromFile( d3d_device_.Get(), L"SF.dds", &ptr, &shader_res_view_, NULL ));\r
+// THROW_IFERR(CreateDDSTextureFromFile( d3d_device_, L"SF.dds", NULL, NULL, &shader_res_view_, NULL ));\r
+\r
+ // サンプルステートの生成\r
+ D3D11_SAMPLER_DESC sdesc = {};\r
+ sdesc.Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR;\r
+ sdesc.AddressU = D3D11_TEXTURE_ADDRESS_WRAP;\r
+ sdesc.AddressV = D3D11_TEXTURE_ADDRESS_WRAP;\r
+ sdesc.AddressW = D3D11_TEXTURE_ADDRESS_WRAP;\r
+ sdesc.ComparisonFunc = D3D11_COMPARISON_NEVER;\r
+ sdesc.MinLOD = 0;\r
+ sdesc.MaxLOD = D3D11_FLOAT32_MAX;\r
+ THROW_IFERR(d3d_device_->CreateSamplerState( &sdesc, &sampler_state_ ));\r
+\r
+ // ワールド座標変換行列のセットアップ\r
+ mat_world_ = XMMatrixIdentity();\r
+\r
+ //g_vMeshColor( 0.7f, 0.7f, 0.7f, 1.0f );\r
+ // \r
+ init_view_matrix();\r
+\r
+\r
+\r
+ // 動的テクスチャの生成\r
+ {\r
+ //D3D11_TEXTURE2D_DESC desc = {0};\r
+ //desc.Width = 256;\r
+ //desc.Height = 256;\r
+ //desc.Format = actual_desc_.Format;\r
+ //desc.MipLevels = 1;\r
+ //desc.SampleDesc.Count = 1;\r
+ //desc.SampleDesc.Quality = 0;\r
+ //desc.ArraySize = 1;\r
+ //desc.Usage = D3D11_USAGE_DEFAULT;\r
+ //desc.BindFlags = D3D11_BIND_RENDER_TARGET | D3D11_BIND_SHADER_RESOURCE;\r
+ //// desc.MiscFlags = D3D11_RESOURCE_MISC_GDI_COMPATIBLE;\r
+ //THROW_IF_ERR(d3d_device_->CreateTexture2D(&desc,NULL,&cube_texture_));\r
+ //THROW_IF_ERR(d3d_device_->CreateRenderTargetView(cube_texture_,0,&cube_view_));\r
+\r
+ //// 深度バッファの作成\r
+ //D3D11_TEXTURE2D_DESC depth = {} ;\r
+ //depth.Width = desc.Width;//rc.right - rc.left;client_width_;\r
+ //depth.Height = desc.Height;//rc.bottom - rc.top;client_height_;\r
+ //depth.MipLevels = 1;\r
+ //depth.ArraySize = 1;\r
+ //depth.Format = DXGI_FORMAT_D24_UNORM_S8_UINT;\r
+ //depth.SampleDesc.Count = 1;\r
+ //depth.SampleDesc.Quality = 0;\r
+ //depth.Usage = D3D11_USAGE_DEFAULT;\r
+ //depth.BindFlags = D3D11_BIND_DEPTH_STENCIL;\r
+ //depth.CPUAccessFlags = 0;\r
+ //depth.MiscFlags = 0;\r
+ //THROW_IF_ERR(d3d_device_->CreateTexture2D( &depth, NULL, &cube_depth_texture_ ));\r
+\r
+ //D3D11_DEPTH_STENCIL_VIEW_DESC dsv = {};\r
+ //dsv.Format = depth.Format;\r
+ //dsv.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2D;\r
+ //dsv.Texture2D.MipSlice = 0;\r
+ //THROW_IF_ERR(d3d_device_->CreateDepthStencilView( cube_depth_texture_, &dsv, &cube_depth_view_ ));\r
+ //THROW_IF_ERR(d3d_device_->CreateShaderResourceView(cube_texture_,0,&cube_shader_res_view_));\r
+\r
+ //D3D11_SAMPLER_DESC sdesc = {};\r
+ //sdesc.Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR;\r
+ //sdesc.AddressU = D3D11_TEXTURE_ADDRESS_WRAP;\r
+ //sdesc.AddressV = D3D11_TEXTURE_ADDRESS_WRAP;\r
+ //sdesc.AddressW = D3D11_TEXTURE_ADDRESS_WRAP;\r
+ //sdesc.ComparisonFunc = D3D11_COMPARISON_NEVER;\r
+ //sdesc.MinLOD = 0;\r
+ //sdesc.MaxLOD = D3D11_FLOAT32_MAX;\r
+ //THROW_IFERR(d3d_device_->CreateSamplerState( &sdesc, &cube_sampler_state_ ));\r
+ //cube_mat_projection_ = XMMatrixPerspectiveFovLH( XM_PIDIV4, /*(rc.right - rc.left)/(rc.bottom - rc.top)*/256 / 256, 0.01f, 100.0f );\r
+\r
+ }\r
+ // \r
+\r
+ init_ = true;// 初期化完了\r
+ }\r
+\r
+\r
+ template <typename ProcType> \r
+ void base_win32_window<ProcType>::init_view_matrix()\r
+ {\r
+ // ビュー行列のセットアップ\r
+ //基本値設定\r
+ float aspect = (float) width_ / height_; //アスペクト比(高さを1としたときの幅)\r
+ float depth = 1.0f; //奥行きZ\r
+ float fovy = (float)atan(1.0f / depth) * 2.0f; //視野をZ=0でデバイスの幅と高さに合わせる\r
+ \r
+ XMVECTOR eye = { 0.0f, 0.0f, -depth, 0.0f };\r
+ XMVECTOR at = { 0.0f, 0.0f, 0.0f, 0.0f};\r
+ XMVECTOR up = { 0.0f, 1.0f, 0.0f, 0.0f };\r
+ mat_view_ = XMMatrixLookAtLH( eye, at, up );\r
+ cb_never_changes cnc;\r
+ cnc.mView = XMMatrixTranspose( mat_view_ );\r
+ //cnc.vLightColor = XMFLOAT4( 1.0f, 0.5f, 0.5f, 1.0f );\r
+ cnc.vLightDir = XMFLOAT4(0.577f, 0.577f, -0.977f, 1.0f);\r
+ // 定数バッファに格納\r
+ d3d_context_->UpdateSubresource( cb_never_changes_.Get(), 0, NULL, &cnc, 0, 0 );\r
+\r
+ // 投影行列のセットアップ\r
+\r
+ //mat_projection_ = XMMatrixPerspectiveFovLH( XM_PIDIV4, /*(rc.right - rc.left)/(rc.bottom - rc.top)*/width_ / height_, 0.01f, 100.0f );\r
+ //mat_projection_ = XMMatrixPerspectiveFovLH( fovy, aspect, 0.01f, 100.0f );\r
+ mat_projection_ = XMMatrixPerspectiveFovLH( fovy, 1.0, 0.0001f, 100.0f );\r
+ cb_change_on_resize ccor;\r
+ ccor.mProjection = XMMatrixTranspose( mat_projection_ );\r
+ // 定数バッファに格納\r
+ d3d_context_->UpdateSubresource( cb_change_on_resize_.Get(), 0, NULL, &ccor, 0, 0 );\r
+\r
+ }\r
+ template <typename ProcType> \r
+ void base_win32_window<ProcType>::create_swapchain_dependent_resources()\r
+ {\r
+\r
+ // ビューの作成\r
+ //THROW_IF_ERR(swap_chain_->GetBuffer(0,texture_.GetIID(),(void**)&texture_));\r
+ //D3D11_TEXTURE2D_DESC desc;\r
+ //texture_->GetDesc(&desc);\r
+\r
+ //THROW_IF_ERR(d3d_device_->CreateRenderTargetView(texture_,0,&view_));\r
+ //texture_.Release();\r
+ THROW_IF_ERR(d3d_device_->CreateRenderTargetView(back_buffer_.Get(),0,view_.GetAddressOf()));\r
+ D3D11_TEXTURE2D_DESC desc;\r
+ back_buffer_->GetDesc(&desc);\r
+\r
+ // 深度バッファの作成\r
+ D3D11_TEXTURE2D_DESC depth = {} ;\r
+ depth.Width = desc.Width;//rc.right - rc.left;client_width_;\r
+ depth.Height = desc.Height;//rc.bottom - rc.top;client_height_;\r
+ depth.MipLevels = 1;\r
+ depth.ArraySize = 1;\r
+ depth.Format = DXGI_FORMAT_D24_UNORM_S8_UINT;\r
+ depth.SampleDesc.Count = 1;\r
+ depth.SampleDesc.Quality = 0;\r
+ depth.Usage = D3D11_USAGE_DEFAULT;\r
+ depth.BindFlags = D3D11_BIND_DEPTH_STENCIL;\r
+ depth.CPUAccessFlags = 0;\r
+ depth.MiscFlags = 0;\r
+ THROW_IF_ERR(d3d_device_->CreateTexture2D( &depth, NULL, &depth_texture_ ));\r
+\r
+ D3D11_DEPTH_STENCIL_VIEW_DESC dsv = {};\r
+ dsv.Format = depth.Format;\r
+ dsv.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2D;\r
+ dsv.Texture2D.MipSlice = 0;\r
+ THROW_IF_ERR(d3d_device_->CreateDepthStencilView( depth_texture_.Get(), &dsv, depth_view_.GetAddressOf() ));\r
+\r
+ // OMステージに登録する\r
+ // d3d_context_->OMSetRenderTargets( 1, &view_.Get(), depth_view_ );\r
+ d3d_context_->OMSetRenderTargets( 1, view_.GetAddressOf(), depth_view_.Get() );\r
+\r
+ // ビューポートの設定\r
+ D3D11_VIEWPORT vp;\r
+ vp.Width = depth.Width;//client_width_;\r
+ vp.Height = depth.Height;//client_height_;\r
+ vp.MinDepth = 0.0f;\r
+ vp.MaxDepth = 1.0f;\r
+ vp.TopLeftX = 0;\r
+ vp.TopLeftY = 0;\r
+ d3d_context_->RSSetViewports( 1, &vp );\r
+\r
+ ID3D11RasterizerState* hpRasterizerState = NULL;\r
+ D3D11_RASTERIZER_DESC hRasterizerDesc = {\r
+ D3D11_FILL_SOLID,\r
+ D3D11_CULL_NONE, //ポリゴンの裏表を無くす\r
+ FALSE,\r
+ 0,\r
+ 0.0f,\r
+ FALSE,\r
+ FALSE,\r
+ FALSE,\r
+ FALSE,\r
+ FALSE\r
+ };\r
+ d3d_device_->CreateRasterizerState(&hRasterizerDesc,&hpRasterizerState);\r
+ d3d_context_->RSSetState(hpRasterizerState);\r
+ }\r
+\r
+ template <typename ProcType> \r
+ void base_win32_window<ProcType>::discard_swapchain_dependent_resources()\r
+ {\r
+ safe_release(depth_view_);\r
+ safe_release(depth_texture_);\r
+ safe_release(view_);\r
+ safe_release(texture_);\r
+ }\r
+\r
+ template <typename ProcType> \r
+ void base_win32_window<ProcType>::discard_device()\r
+ {\r
+ safe_release(sampler_state_);\r
+ safe_release(shader_res_view_);\r
+ safe_release(cb_changes_every_frame_);\r
+ safe_release(cb_change_on_resize_);\r
+ safe_release(cb_never_changes_);\r
+ safe_release(i_buffer_);\r
+ safe_release(v_buffer_);\r
+ safe_release(p_shader_);\r
+ safe_release(input_layout_);\r
+ safe_release(v_shader_);\r
+ discard_swapchain_dependent_resources();\r
+ safe_release(back_buffer_);\r
+ //safe_release(cube_sampler_state_);\r
+ //safe_release(cube_shader_res_view_);\r
+ //safe_release(cube_view_);\r
+ //safe_release(cube_depth_view_);\r
+ //safe_release(cube_texture_);\r
+ //safe_release(cube_depth_texture_);\r
+ //safe_release(render_target_);\r
+// safe_release(swap_chain_);\r
+ safe_release(d3d_context_);\r
+ safe_release(d3d_device_);\r
+ safe_release(adapter_);\r
+\r
+ }\r
+\r
+ template <typename ProcType> \r
+ void base_win32_window<ProcType>::discard_device_independant_resources(){\r
+ safe_release(dxgi_factory_);\r
+ }\r
+\r
+ template <typename ProcType> \r
+ void base_win32_window<ProcType>::get_dxgi_information()\r
+ {\r
+ int i = 0;\r
+\r
+ while(1){\r
+ IDXGIAdapter1Ptr adapter;\r
+ HRESULT hr = dxgi_factory_->EnumAdapters1(i,&adapter);\r
+ if(hr == DXGI_ERROR_NOT_FOUND)\r
+ {\r
+ break;\r
+ }\r
+ DXGI_ADAPTER_DESC1 desc;\r
+ adapter->GetDesc1(&desc);\r
+ //adapter->CheckInterfaceSupport();\r
+\r
+ wdout << desc.Description << std::endl;\r
+ wdout << desc.DedicatedVideoMemory << std::endl;\r
+ IDXGIDevice1Ptr device;\r
+\r
+ uint32_t oi = 0;\r
+\r
+\r
+ while(1)\r
+ {\r
+ IDXGIOutputPtr output; \r
+ if(adapter->EnumOutputs(oi,&output) == DXGI_ERROR_NOT_FOUND){\r
+ break;\r