<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>Windows7.1SDK</PlatformToolset>
</PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>Windows7.1SDK</PlatformToolset>
+ </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>Windows7.1SDK</PlatformToolset>
</PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>Windows7.1SDK</PlatformToolset>
+ </PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
<Import Project="..\SF.props" />
</ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="..\SF.props" />
+ </ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<Import Project="..\SF.props" />
</ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="..\SF.props" />
+ </ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<IncludePath>C:\Program Files %28x86%29\Microsoft DirectX SDK %28June 2010%29\Include;$(IncludePath)</IncludePath>
</PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <IncludePath>C:\Program Files %28x86%29\Microsoft DirectX SDK %28June 2010%29\Include;$(IncludePath)</IncludePath>
+ </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LibraryPath>C:\Program Files %28x86%29\Microsoft DirectX SDK %28June 2010%29\Lib\x64;$(LibraryPath)</LibraryPath>
</PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <LibraryPath>C:\Program Files %28x86%29\Microsoft DirectX SDK %28June 2010%29\Lib\x64;$(LibraryPath)</LibraryPath>
+ </PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <StructMemberAlignment>Default</StructMemberAlignment>
+ <AdditionalOptions>/Zm110 %(AdditionalOptions)</AdditionalOptions>
+ <DisableLanguageExtensions>false</DisableLanguageExtensions>
+ <FloatingPointModel>Fast</FloatingPointModel>
+ <EnableEnhancedInstructionSet>NotSet</EnableEnhancedInstructionSet>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ <Manifest>
+ <AdditionalManifestFiles>DeclareDPIAware.manifest %(AdditionalManifestFiles)</AdditionalManifestFiles>
+ </Manifest>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<StructMemberAlignment>16Bytes</StructMemberAlignment>
<AdditionalOptions>/Zm110 %(AdditionalOptions)</AdditionalOptions>
<DisableLanguageExtensions>false</DisableLanguageExtensions>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>false</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="application.h" />
<ClInclude Include="audio_base.h" />
<ClCompile Include="sf_windows.cpp" />
<ClCompile Include="stdafx.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
</ClCompile>
<ClCompile Include="taskbar.cpp" />
<ClCompile Include="timer.cpp" />
<ClCompile Include="winmain.cpp" />
</ItemGroup>
<ItemGroup>
- <ResourceCompile Include="minitimer.rc" />
+ <ResourceCompile Include="dxgi_test.rc" />
</ItemGroup>
<ItemGroup>
<None Include="icon1.ico" />
(L"DXGI_MODE_SCALING_CENTERED",L"スケーリングなしを指定します。イメージはディスプレイの中央に配置されます。通常、このフラグは固定ドットピッチ ディスプレイ (LED ディスプレイなど) に使用します。")
(L"DXGI_MODE_SCALING_STRETCHED",L"拡大スケーリングを指定します。");
+struct simple_vertex
+{
+ XMFLOAT3 pos;
+ XMFLOAT2 tex;
+};
+
+struct cb_never_changes
+{
+ XMMATRIX mView;
+};
+
+struct cb_change_on_resize
+{
+ XMMATRIX mProjection;
+};
+
+struct cb_changes_every_frame
+{
+ XMMATRIX mWorld;
+ XMFLOAT4 vMeshColor;
+};
+
struct toplevel_window::impl : public base_win32_window
{
impl(const std::wstring& menu_name,const std::wstring& name,bool fit_to_display,float width = 160,float height = 100)
- : base_win32_window(menu_name,name,fit_to_display,width,height) , timer_(*this,1000)/*wm_task_bar_create_(0),result_time_(INTERVAL_SEC1),status_(active)*/
+ : base_win32_window(menu_name,name,fit_to_display,width,height) , timer_(*this,1000),icon_(IDI_ICON1),mesh_color_(0.7f, 0.7f, 0.7f, 1.0f),init_(false)/*wm_task_bar_create_(0),result_time_(INTERVAL_SEC1),status_(active)*/
{
+
on_render.connect(boost::bind(&impl::render,this));
};
{
// バックバッファなどに関係するインターフェースを解放する
// バックバッファを解放する
- if(swap_chain_)
+ if(init_)
{
+ calc_client_size();
+ discard_swap_chain_dependent_resources();
swap_chain_->ResizeBuffers(0,0,0,DXGI_FORMAT_B8G8R8A8_UNORM,DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH);
+ create_swap_chain_dependent_resources();
}
// バックバッファなどに関係するインターフェースを再作成する
paint_struct begin_paint(hwnd);
//CloseHandle(cb);
// 描画コードの呼び出し
- render();
+ //render();
}
virtual void create(){
create_device_independent_resources();
-// icon_ = create_icon();
- register_class(this->name_.c_str(),CS_HREDRAW | CS_VREDRAW ,0);
+// icon_ = ::LoadIconW(HINST_THISCOMPONENT,MAKEINTRESOURCE(IDI_ICON1));
+ register_class(this->name_.c_str(),CS_HREDRAW | CS_VREDRAW ,0,icon_.get());
create_window();
// 半透明ウィンドウを有効にする。
virtual void discard_device()
{
- safe_release(view_);
- safe_release(texture_);
- safe_release(render_target_);
+ safe_release(sampler_state_);
+ safe_release(shader_res_view_);
+ safe_release(cb_changes_every_frame_);
+ safe_release(cb_change_on_resize_);
+ safe_release(cb_never_changes_);
+ safe_release(i_buffer_);
+ safe_release(v_buffer_);
+ safe_release(p_shader_);
+ safe_release(input_layout_);
+ safe_release(v_shader_);
+ discard_swap_chain_dependent_resources();
+ //safe_release(render_target_);
safe_release(swap_chain_);
safe_release(d3d_context_);
safe_release(d3d_device_);
safe_release(adapter_);
}
+ void calc_client_size()
+ {
+ //クライアント領域の現在の幅、高さを求める
+ RECT rc;
+ GetClientRect( hwnd_, &rc );
+ client_width_ = rc.right - rc.left;
+ client_height_ = rc.bottom - rc.top;
+ }
+
virtual void create_device(){
+ calc_client_size();
HRESULT hr = S_OK;
-
- //ウィンドウの現在の幅、高さを求める
- //RECT rc;
- //GetClientRect( hwnd_, &rc );
- //uint32_t width = rc.right - rc.left;
- //uint32_t height = rc.bottom - rc.top;
-
+ init_ = false;
+
// アダプタデバイス情報の取得
//LARGE_INTEGER version;
THROW_IFERR(dxgi_factory_->EnumAdapters1(0,&adapter_));
adapter_,
D3D_DRIVER_TYPE_UNKNOWN ,
NULL,
- D3D11_CREATE_DEVICE_BGRA_SUPPORT,
+ D3D11_CREATE_DEVICE_DEBUG,
&feature_levels[0],
feature_levels.size(),
D3D11_SDK_VERSION,
// 表示モード
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.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
+ desired_desc.Height = client_height_;// 高さ
+ desired_desc.Width = client_width_;// 幅
desired_desc.Scaling = DXGI_MODE_SCALING_CENTERED;// スケーリングなし
// リフレッシュレートを60Hzを要求する
desired_desc.RefreshRate.Numerator = 60000;
desc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
desc.BufferCount = 1;
desc.OutputWindow = hwnd_;
- desc.SwapEffect = DXGI_SWAP_EFFECT_DISCARD;
+ // desc.SwapEffect = DXGI_SWAP_EFFECT_;
desc.Windowed = TRUE;
desc.Flags = DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH;
}
+ // スワップチェーン依存リソースの作成
+ 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()
+ {
// ビューの作成
THROW_IFERR(swap_chain_->GetBuffer(0,texture_.GetIID(),(void**)&texture_));
THROW_IFERR(d3d_device_->CreateRenderTargetView(texture_,0,&view_));
+ texture_.Release();
+
+ // 深度バッファの作成
+ D3D11_TEXTURE2D_DESC depth = {} ;
+ depth.Width = client_width_;
+ depth.Height = client_height_;
+ depth.MipLevels = 1;
+ depth.ArraySize = 1;
+ depth.Format = DXGI_FORMAT_D24_UNORM_S8_UINT;
+ depth.SampleDesc.Count = 1;
+ depth.SampleDesc.Quality = 0;
+ depth.Usage = D3D11_USAGE_DEFAULT;
+ depth.BindFlags = D3D11_BIND_DEPTH_STENCIL;
+ depth.CPUAccessFlags = 0;
+ depth.MiscFlags = 0;
+ THROW_IFERR(d3d_device_->CreateTexture2D( &depth, NULL, &depth_texture_ ));
+
+ D3D11_DEPTH_STENCIL_VIEW_DESC dsv = {};
+ dsv.Format = depth.Format;
+ dsv.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2D;
+ dsv.Texture2D.MipSlice = 0;
+ THROW_IFERR(d3d_device_->CreateDepthStencilView( depth_texture_, &dsv, &depth_view_ ));
+
+ // OMステージに登録する
+ d3d_context_->OMSetRenderTargets( 1, &view_.GetInterfacePtr(), depth_view_ );
+
+ // ビューポートの設定
+ D3D11_VIEWPORT vp;
+ vp.Width = client_width_;
+ vp.Height = client_height_;
+ vp.MinDepth = 0.0f;
+ vp.MaxDepth = 1.0f;
+ vp.TopLeftX = 0;
+ vp.TopLeftY = 0;
+ d3d_context_->RSSetViewports( 1, &vp );
+
}
+ void discard_swap_chain_dependent_resources()
+ {
+ safe_release(depth_view_);
+ safe_release(depth_texture_);
+ safe_release(view_);
+ safe_release(texture_);
+ }
+
+
virtual void create_device_independent_resources()
{
//wic_imaging_factory_.CreateInstance(CLSID_WICImagingFactory);
//thunk_proc_ = (WNDPROC)thunk_.getCode();
- layout_rect_ = D2D1::RectF(0.0f,0.0f,width_,height_);
+ layout_rect_ = D2D1::RectF(0.0f,0.0f,client_width_,client_height_);
// Text Formatの作成
THROW_IFERR(write_factory_->CreateTextFormat(
L"メイリオ", // Font family name.
void render(){
- static int t = 0;
- if(swap_chain_)
+ static float t = 0.0f;
+ static DWORD time_start = 0;
+
+ if(init_)
{
+ // 表示
+ swap_chain_->Present(1,0);
+
+
float color[4] = { 0.7f, 0.0f, 0.0f, 1.0f };
+
+ // 描画ターゲットのクリア
d3d_context_->ClearRenderTargetView(view_,color);
- swap_chain_->Present(0,0);
+ // 深度バッファのクリア
+ d3d_context_->ClearDepthStencilView( depth_view_, D3D11_CLEAR_DEPTH, 1.0f, 0 );
+
+ DWORD time_count = GetTickCount();
+ if( time_start == 0 )
+ time_start = time_count;
+ t = ( time_count - time_start ) / 1000.0f;
+
+ // Y軸で回転させる
+ mat_world_ = XMMatrixRotationY( t );
+
+ // 色の変更
+ mesh_color_.x = ( sinf( t * 1.0f ) + 1.0f ) * 0.5f;
+ mesh_color_.y = ( cosf( t * 3.0f ) + 1.0f ) * 0.5f;
+ mesh_color_.z = ( sinf( t * 5.0f ) + 1.0f ) * 0.5f;
+
+
+ // 定数更新
+ cb_changes_every_frame cb;
+ cb.mWorld = XMMatrixTranspose( mat_world_ );
+ cb.vMeshColor = mesh_color_;
+ d3d_context_->UpdateSubresource( cb_changes_every_frame_, 0, NULL, &cb, 0, 0 );
+
+ // 立方体の描画
+ d3d_context_->VSSetShader( v_shader_, NULL, 0 );
+ d3d_context_->VSSetConstantBuffers( 0, 1, &cb_never_changes_.GetInterfacePtr() );
+ d3d_context_->VSSetConstantBuffers( 1, 1, &cb_change_on_resize_.GetInterfacePtr() );
+ d3d_context_->VSSetConstantBuffers( 2, 1, &cb_changes_every_frame_.GetInterfacePtr() );
+ d3d_context_->PSSetShader( p_shader_, NULL, 0 );
+ d3d_context_->PSSetConstantBuffers( 2, 1, &cb_changes_every_frame_.GetInterfacePtr() );
+ d3d_context_->PSSetShaderResources( 0, 1, &shader_res_view_.GetInterfacePtr() );
+ d3d_context_->PSSetSamplers( 0, 1, &sampler_state_.GetInterfacePtr() );
+ d3d_context_->DrawIndexed( 36, 0, 0 );
+
}
// if (render_target_)
WS_EX_APPWINDOW | WS_EX_TOPMOST,
name_.c_str(),
title_.c_str(),
- WS_OVERLAPPEDWINDOW ,
+ WS_OVERLAPPEDWINDOW & ~WS_THICKFRAME,
CW_USEDEFAULT,
CW_USEDEFAULT,
static_cast<uint32_t>(dpi_.scale_x(width_)),
ID3D11DeviceContextPtr d3d_context_;
ID3D11Texture2DPtr texture_;
ID3D11RenderTargetViewPtr view_;
-
+ ID3D11Texture2DPtr depth_texture_;
+ ID3D11DepthStencilViewPtr depth_view_;
+ ID3D11VertexShaderPtr v_shader_;
+ ID3D11InputLayoutPtr input_layout_;
+ ID3D11PixelShaderPtr p_shader_;
+ ID3D11BufferPtr v_buffer_;
+ ID3D11BufferPtr i_buffer_;
+ ID3D11BufferPtr cb_never_changes_;
+ ID3D11BufferPtr cb_change_on_resize_;
+ ID3D11BufferPtr cb_changes_every_frame_;
+ ID3D11ShaderResourceViewPtr shader_res_view_;
+ ID3D11SamplerStatePtr sampler_state_;
+
+ XMMATRIX mat_world_;
+ XMMATRIX mat_view_;
+ XMMATRIX mat_projection_;
+ XMFLOAT4 mesh_color_;
+
+ float client_width_,client_height_;
+
//IDXGISwapChainPtr;
ID2D1FactoryPtr factory_;
ID2D1HwndRenderTargetPtr render_target_;
IDWriteTextFormatPtr write_text_format_;
IDXGISwapChainPtr swap_chain_;
std::wstring dxgi_info_;
+ icon icon_;
+ bool init_;
D2D1_RECT_F layout_rect_;
D2D1_SIZE_U icon_size_;
return bitmap;
}
-
+
toplevel_window::toplevel_window(const std::wstring& menu_name,const std::wstring& name,bool fit_to_display,float width ,float height)
: impl_(new impl(menu_name,name,fit_to_display,width,height))
{
bool toplevel_window::is_show(){return impl_->is_show();};
void toplevel_window::text(std::wstring& text){impl_->text(text);};
void toplevel_window::update(){impl_->update();};
+ void toplevel_window::render(){impl_->render();};
toplevel_window_ptr create_toplevel_window
(
float height
)
{
- toplevel_window* p = new toplevel_window(menu_name,name,fit_to_display,width,height);
+// クライアント領域のサイズからウィンドウサイズを設定
+RECT rect = { 0, 0, width, height };
+::AdjustWindowRectEx( &rect, WS_OVERLAPPEDWINDOW & ~WS_THICKFRAME, FALSE, 0 );
+ toplevel_window* p = new toplevel_window(menu_name,name,fit_to_display,rect.right - rect.left,rect.bottom - rect.top);
p->create();
p->show();
p->update();