+ // スワップチェーン依存リソースの作成
+ create_swap_chain_dependent_resources();
+
+ {
+ // バーテックスシェーダのコンパイル
+ ID3DBlobPtr vsblob,vserrblob;
+ DWORD compile_flag = D3DCOMPILE_ENABLE_STRICTNESS;
+#if defined( DEBUG ) || defined( _DEBUG )
+ compile_flag |= D3DCOMPILE_DEBUG;
+#endif
+ HRESULT hr = D3DX11CompileFromFile( L"Tutorial07.fx", NULL, NULL, "VS", "vs_4_0",
+ compile_flag, 0, NULL, &vsblob, &vserrblob, NULL );
+ if( FAILED( hr ) )
+ {
+ if( vserrblob != NULL )
+ OutputDebugStringA( (char*)vserrblob->GetBufferPointer() );
+ if( vserrblob ) vserrblob.Release();
+ throw sf::win32_error_exception(hr);
+ }
+
+ // バーテックスシェーダの生成
+ THROW_IFERR(d3d_device_->CreateVertexShader( vsblob->GetBufferPointer(), vsblob->GetBufferSize(), NULL, &v_shader_ ));
+
+ // 入力頂点レイアウトの定義
+ D3D11_INPUT_ELEMENT_DESC
+ layout[] = {
+ { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 },
+ { "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0 }};
+
+ // 入力頂点レイアウトの生成
+ THROW_IFERR(d3d_device_->CreateInputLayout( layout, 2, vsblob->GetBufferPointer(),
+ vsblob->GetBufferSize(), &input_layout_ ));
+ vsblob.Release();
+ }
+
+ // 入力レイアウトの設定
+ d3d_context_->IASetInputLayout( input_layout_ );
+
+ // ピクセル・シェーダーのコンパイル
+ {
+ ID3DBlobPtr psblob,pserror;
+ DWORD compile_flag = D3DCOMPILE_ENABLE_STRICTNESS;
+#if defined( DEBUG ) || defined( _DEBUG )
+ compile_flag |= D3DCOMPILE_DEBUG;
+#endif
+ HRESULT hr = D3DX11CompileFromFile( L"Tutorial07.fx", NULL, NULL, "PS", "ps_4_0",
+ compile_flag, 0, NULL, &psblob, &pserror, NULL );
+ if( FAILED( hr ) )
+ {
+ if( pserror != NULL )
+ OutputDebugStringA( (char*)pserror->GetBufferPointer() );
+ safe_release(pserror);
+ throw sf::win32_error_exception(hr);
+ }
+
+ // ピクセルシェーダの作成
+ THROW_IFERR(d3d_device_->CreatePixelShader( psblob->GetBufferPointer(), psblob->GetBufferSize(), NULL, &p_shader_ ));
+
+ psblob.Release();
+ }
+
+ // バーテックスバッファの作成
+ // Create vertex buffer
+ simple_vertex vertices[] =
+ {
+ { XMFLOAT3( -1.0f, 1.0f, -1.0f ), XMFLOAT2( 0.0f, 0.0f ) },
+ { XMFLOAT3( 1.0f, 1.0f, -1.0f ), XMFLOAT2( 1.0f, 0.0f ) },
+ { XMFLOAT3( 1.0f, 1.0f, 1.0f ), XMFLOAT2( 1.0f, 1.0f ) },
+ { XMFLOAT3( -1.0f, 1.0f, 1.0f ), XMFLOAT2( 0.0f, 1.0f ) },
+
+ { XMFLOAT3( -1.0f, -1.0f, -1.0f ), XMFLOAT2( 0.0f, 0.0f ) },
+ { XMFLOAT3( 1.0f, -1.0f, -1.0f ), XMFLOAT2( 1.0f, 0.0f ) },
+ { XMFLOAT3( 1.0f, -1.0f, 1.0f ), XMFLOAT2( 1.0f, 1.0f ) },
+ { XMFLOAT3( -1.0f, -1.0f, 1.0f ), XMFLOAT2( 0.0f, 1.0f ) },
+
+ { XMFLOAT3( -1.0f, -1.0f, 1.0f ), XMFLOAT2( 0.0f, 0.0f ) },
+ { XMFLOAT3( -1.0f, -1.0f, -1.0f ), XMFLOAT2( 1.0f, 0.0f ) },
+ { XMFLOAT3( -1.0f, 1.0f, -1.0f ), XMFLOAT2( 1.0f, 1.0f ) },
+ { XMFLOAT3( -1.0f, 1.0f, 1.0f ), XMFLOAT2( 0.0f, 1.0f ) },
+
+ { XMFLOAT3( 1.0f, -1.0f, 1.0f ), XMFLOAT2( 0.0f, 0.0f ) },
+ { XMFLOAT3( 1.0f, -1.0f, -1.0f ), XMFLOAT2( 1.0f, 0.0f ) },
+ { XMFLOAT3( 1.0f, 1.0f, -1.0f ), XMFLOAT2( 1.0f, 1.0f ) },
+ { XMFLOAT3( 1.0f, 1.0f, 1.0f ), XMFLOAT2( 0.0f, 1.0f ) },
+
+ { XMFLOAT3( -1.0f, -1.0f, -1.0f ), XMFLOAT2( 0.0f, 0.0f ) },
+ { XMFLOAT3( 1.0f, -1.0f, -1.0f ), XMFLOAT2( 1.0f, 0.0f ) },
+ { XMFLOAT3( 1.0f, 1.0f, -1.0f ), XMFLOAT2( 1.0f, 1.0f ) },
+ { XMFLOAT3( -1.0f, 1.0f, -1.0f ), XMFLOAT2( 0.0f, 1.0f ) },
+
+ { XMFLOAT3( -1.0f, -1.0f, 1.0f ), XMFLOAT2( 0.0f, 0.0f ) },
+ { XMFLOAT3( 1.0f, -1.0f, 1.0f ), XMFLOAT2( 1.0f, 0.0f ) },
+ { XMFLOAT3( 1.0f, 1.0f, 1.0f ), XMFLOAT2( 1.0f, 1.0f ) },
+ { XMFLOAT3( -1.0f, 1.0f, 1.0f ), XMFLOAT2( 0.0f, 1.0f ) },
+ };
+ //std::vector<simple_vertex> vertices = boost::assign::list_of<simple_vertex>
+ //
+ // ( XMFLOAT3( -1.0f, 1.0f, -1.0f ), XMFLOAT2( 0.0f, 0.0f ) )
+ // ( XMFLOAT3( 1.0f, 1.0f, -1.0f ), XMFLOAT2( 1.0f, 0.0f ) )
+ // ( XMFLOAT3( 1.0f, 1.0f, 1.0f ), XMFLOAT2( 1.0f, 1.0f ) )
+ // ( XMFLOAT3( -1.0f, 1.0f, 1.0f ), XMFLOAT2( 0.0f, 1.0f ) )
+
+ // ( XMFLOAT3( -1.0f, -1.0f, -1.0f ), XMFLOAT2( 0.0f, 0.0f ) )
+ // ( XMFLOAT3( 1.0f, -1.0f, -1.0f ), XMFLOAT2( 1.0f, 0.0f ) )
+ // ( XMFLOAT3( 1.0f, -1.0f, 1.0f ), XMFLOAT2( 1.0f, 1.0f ) )
+ // ( XMFLOAT3( -1.0f, -1.0f, 1.0f ), XMFLOAT2( 0.0f, 1.0f ) )
+
+ // ( XMFLOAT3( -1.0f, -1.0f, 1.0f ), XMFLOAT2( 0.0f, 0.0f ) )
+ // ( XMFLOAT3( -1.0f, -1.0f, -1.0f ), XMFLOAT2( 1.0f, 0.0f ) )
+ // ( XMFLOAT3( -1.0f, 1.0f, -1.0f ), XMFLOAT2( 1.0f, 1.0f ) )
+ // ( XMFLOAT3( -1.0f, 1.0f, 1.0f ), XMFLOAT2( 0.0f, 1.0f ) )
+
+ // ( XMFLOAT3( 1.0f, -1.0f, 1.0f ), XMFLOAT2( 0.0f, 0.0f ) )
+ // ( XMFLOAT3( 1.0f, -1.0f, -1.0f ), XMFLOAT2( 1.0f, 0.0f ) )
+ // ( XMFLOAT3( 1.0f, 1.0f, -1.0f ), XMFLOAT2( 1.0f, 1.0f ) )
+ // ( XMFLOAT3( 1.0f, 1.0f, 1.0f ), XMFLOAT2( 0.0f, 1.0f ) )
+
+ // ( XMFLOAT3( -1.0f, -1.0f, -1.0f ), XMFLOAT2( 0.0f, 0.0f ) )
+ // ( XMFLOAT3( 1.0f, -1.0f, -1.0f ), XMFLOAT2( 1.0f, 0.0f ) )
+ // ( XMFLOAT3( 1.0f, 1.0f, -1.0f ), XMFLOAT2( 1.0f, 1.0f ) )
+ // ( XMFLOAT3( -1.0f, 1.0f, -1.0f ), XMFLOAT2( 0.0f, 1.0f ) )
+
+ // ( XMFLOAT3( -1.0f, -1.0f, 1.0f ), XMFLOAT2( 0.0f, 0.0f ) )
+ // ( XMFLOAT3( 1.0f, -1.0f, 1.0f ), XMFLOAT2( 1.0f, 0.0f ) )
+ // ( XMFLOAT3( 1.0f, 1.0f, 1.0f ), XMFLOAT2( 1.0f, 1.0f ) )
+ // ( XMFLOAT3( -1.0f, 1.0f, 1.0f ), XMFLOAT2( 0.0f, 1.0f ) );
+
+ D3D11_BUFFER_DESC bd = {};
+ bd.Usage = D3D11_USAGE_DEFAULT;
+ bd.ByteWidth = sizeof( simple_vertex ) * 24;
+ bd.BindFlags = D3D11_BIND_VERTEX_BUFFER;
+ bd.CPUAccessFlags = 0;
+
+ D3D11_SUBRESOURCE_DATA init_data = {};
+ init_data.pSysMem = vertices;
+ THROW_IFERR(d3d_device_->CreateBuffer( &bd, &init_data, &v_buffer_ ));
+
+ // 頂点バッファのセット
+ uint32_t stride = sizeof( simple_vertex );
+ uint32_t offset = 0;
+ d3d_context_->IASetVertexBuffers( 0, 1, &v_buffer_.GetInterfacePtr(), &stride, &offset );
+
+ // インデックスバッファの生成
+ WORD indices[] =
+ {
+ 3,1,0,
+ 2,1,3,
+
+ 6,4,5,
+ 7,4,6,
+
+ 11,9,8,
+ 10,9,11,
+
+ 14,12,13,
+ 15,12,14,
+
+ 19,17,16,
+ 18,17,19,
+
+ 22,20,21,
+ 23,20,22
+ };
+
+ bd.Usage = D3D11_USAGE_DEFAULT;
+ bd.ByteWidth = sizeof( WORD ) * 36;
+ bd.BindFlags = D3D11_BIND_INDEX_BUFFER;
+ bd.CPUAccessFlags = 0;
+ init_data.pSysMem = indices;
+ THROW_IFERR(d3d_device_->CreateBuffer( &bd, &init_data, &i_buffer_ ));
+
+ // インデックスバッファのセット
+ d3d_context_->IASetIndexBuffer( i_buffer_.GetInterfacePtr(), DXGI_FORMAT_R16_UINT, 0 );
+
+ // プリミティブの形態を指定する
+ d3d_context_->IASetPrimitiveTopology( D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST );
+
+ // 定数バッファを生成する。
+ bd.Usage = D3D11_USAGE_DEFAULT;
+ bd.ByteWidth = sizeof(cb_never_changes);
+ bd.BindFlags = D3D11_BIND_CONSTANT_BUFFER;
+ bd.CPUAccessFlags = 0;
+ THROW_IFERR(d3d_device_->CreateBuffer( &bd, NULL, &cb_never_changes_ ));
+
+ bd.ByteWidth = sizeof(cb_change_on_resize);
+ THROW_IFERR(d3d_device_->CreateBuffer( &bd, NULL, &cb_change_on_resize_ ));
+
+ bd.ByteWidth = sizeof(cb_changes_every_frame);
+ THROW_IFERR(d3d_device_->CreateBuffer( &bd, NULL, &cb_changes_every_frame_ ));
+
+ // テクスチャのロード
+ THROW_IFERR(D3DX11CreateShaderResourceViewFromFile( d3d_device_, L"SF.dds", NULL, NULL, &shader_res_view_, NULL ));
+
+ // サンプルステートの生成
+ D3D11_SAMPLER_DESC sdesc = {};
+ sdesc.Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR;
+ sdesc.AddressU = D3D11_TEXTURE_ADDRESS_WRAP;
+ sdesc.AddressV = D3D11_TEXTURE_ADDRESS_WRAP;
+ sdesc.AddressW = D3D11_TEXTURE_ADDRESS_WRAP;
+ sdesc.ComparisonFunc = D3D11_COMPARISON_NEVER;
+ sdesc.MinLOD = 0;
+ sdesc.MaxLOD = D3D11_FLOAT32_MAX;
+ THROW_IFERR(d3d_device_->CreateSamplerState( &sdesc, &sampler_state_ ));
+
+ // ワールド座標変換行列のセットアップ
+ mat_world_ = XMMatrixIdentity();
+
+ //g_vMeshColor( 0.7f, 0.7f, 0.7f, 1.0f );
+
+
+ // ビュー行列のセットアップ
+ XMVECTOR eye = XMVectorSet( 0.0f, 3.0f, -6.0f, 0.0f );
+ XMVECTOR at = XMVectorSet( 0.0f, 1.0f, 0.0f, 0.0f );
+ XMVECTOR up = XMVectorSet( 0.0f, 1.0f, 0.0f, 0.0f );
+ mat_view_ = XMMatrixLookAtLH( eye, at, up );
+ cb_never_changes cnc;
+ cnc.mView = XMMatrixTranspose( mat_view_ );
+ // 定数バッファに格納
+ d3d_context_->UpdateSubresource( cb_never_changes_, 0, NULL, &cnc, 0, 0 );
+
+ // 投影行列のセットアップ
+ mat_projection_ = XMMatrixPerspectiveFovLH( XM_PIDIV4, client_width_ / client_height_, 0.01f, 100.0f );
+ cb_change_on_resize ccor;
+ ccor.mProjection = XMMatrixTranspose( mat_projection_ );
+ // 定数バッファに格納
+ d3d_context_->UpdateSubresource( cb_change_on_resize_, 0, NULL, &ccor, 0, 0 );
+
+ init_ = true;// 初期化完了
+ }
+
+ void create_swap_chain_dependent_resources()
+ {