X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;ds=sidebyside;f=winwrapper%2Fsf_windows.cpp;fp=winwrapper%2Fsf_windows.cpp;h=3df3b5ff6a8f6c0a7247c0e7691cf548e248c937;hb=c4bcea1866a18864acef1847652c8053ffc01996;hp=ac72b529d3af12810fd2ddbf428fb10e11e9cc32;hpb=5c3cf5f3e442e73a733d51a15a3ac819085e1996;p=winaudioj%2Fwinwrapper.git diff --git a/winwrapper/sf_windows.cpp b/winwrapper/sf_windows.cpp index ac72b52..3df3b5f 100644 --- a/winwrapper/sf_windows.cpp +++ b/winwrapper/sf_windows.cpp @@ -482,8 +482,8 @@ namespace sf //} - // - + // バックバッファの作成 + D3D11_TEXTURE2D_DESC desc = {0}; desc.Width = actual_desc_.Width; desc.Height = actual_desc_.Height; @@ -730,6 +730,58 @@ namespace sf // 定数バッファに格納 d3d_context_->UpdateSubresource( cb_change_on_resize_, 0, NULL, &ccor, 0, 0 ); + // 動的テクスチャの生成 + { + D3D11_TEXTURE2D_DESC desc = {0}; + desc.Width = 256; + desc.Height = 256; + desc.Format = actual_desc_.Format; + desc.MipLevels = 1; + desc.SampleDesc.Count = 1; + desc.SampleDesc.Quality = 0; + desc.ArraySize = 1; + desc.Usage = D3D11_USAGE_DEFAULT; + desc.BindFlags = D3D11_BIND_RENDER_TARGET | D3D11_BIND_SHADER_RESOURCE; + // desc.MiscFlags = D3D11_RESOURCE_MISC_GDI_COMPATIBLE; + THROW_IF_ERR(d3d_device_->CreateTexture2D(&desc,NULL,&cube_texture_)); + THROW_IF_ERR(d3d_device_->CreateRenderTargetView(cube_texture_,0,&cube_view_)); + + // 深度バッファの作成 + D3D11_TEXTURE2D_DESC depth = {} ; + depth.Width = desc.Width;//rc.right - rc.left;client_width_; + depth.Height = desc.Height;//rc.bottom - rc.top;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_IF_ERR(d3d_device_->CreateTexture2D( &depth, NULL, &cube_depth_texture_ )); + + D3D11_DEPTH_STENCIL_VIEW_DESC dsv = {}; + dsv.Format = depth.Format; + dsv.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2D; + dsv.Texture2D.MipSlice = 0; + THROW_IF_ERR(d3d_device_->CreateDepthStencilView( cube_depth_texture_, &dsv, &cube_depth_view_ )); + THROW_IF_ERR(d3d_device_->CreateShaderResourceView(cube_texture_,0,&cube_shader_res_view_)); + + 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, &cube_sampler_state_ )); + cube_mat_projection_ = XMMatrixPerspectiveFovLH( XM_PIDIV4, /*(rc.right - rc.left)/(rc.bottom - rc.top)*/256 / 256, 0.01f, 100.0f ); + + } + // + init_ = true;// 初期化完了 } @@ -771,7 +823,7 @@ namespace sf // OMステージに登録する // d3d_context_->OMSetRenderTargets( 1, &view_.GetInterfacePtr(), depth_view_ ); - d3d_context_->OMSetRenderTargets( 1, &view_.GetInterfacePtr(), depth_view_ ); + // d3d_context_->OMSetRenderTargets( 1, &view_.GetInterfacePtr(), depth_view_ ); // ビューポートの設定 D3D11_VIEWPORT vp; @@ -807,11 +859,19 @@ namespace sf safe_release(input_layout_); safe_release(v_shader_); discard_swapchain_dependent_resources(); + safe_release(back_buffer_); + safe_release(cube_sampler_state_); + safe_release(cube_shader_res_view_); + safe_release(cube_view_); + safe_release(cube_depth_view_); + safe_release(cube_texture_); + safe_release(cube_depth_texture_); //safe_release(render_target_); // safe_release(swap_chain_); safe_release(d3d_context_); safe_release(d3d_device_); safe_release(adapter_); + } template @@ -969,13 +1029,13 @@ namespace sf if(init_) { - float color[4] = { 0.0f, 0.0f, 1.0f, 1.0f }; - + float cube_color[4] = { 0.0f, 0.0f, 1.0f, 0.5f }; // 描画ターゲットのクリア - d3d_context_->ClearRenderTargetView(view_,color); + d3d_context_->ClearRenderTargetView(cube_view_,cube_color); // 深度バッファのクリア - d3d_context_->ClearDepthStencilView( depth_view_, D3D11_CLEAR_DEPTH, 1.0f, 0 ); + d3d_context_->ClearDepthStencilView( cube_depth_view_, D3D11_CLEAR_DEPTH, 1.0f, 0 ); + DWORD time_count = GetTickCount(); if( time_start == 0 ) @@ -998,6 +1058,12 @@ namespace sf cb.vLightColor = mesh_color_; d3d_context_->UpdateSubresource( cb_changes_every_frame_, 0, NULL, &cb, 0, 0 ); + cb_change_on_resize ccor; + ccor.mProjection = XMMatrixTranspose( cube_mat_projection_ ); + // 定数バッファに格納 + d3d_context_->UpdateSubresource( cb_change_on_resize_, 0, NULL, &ccor, 0, 0 ); + + // 立方体の描画 d3d_context_->VSSetShader( v_shader_, NULL, 0 ); d3d_context_->VSSetConstantBuffers( 0, 1, &cb_never_changes_.GetInterfacePtr() ); @@ -1008,6 +1074,48 @@ namespace sf d3d_context_->PSSetShaderResources( 0, 1, &shader_res_view_.GetInterfacePtr() ); d3d_context_->PSSetSamplers( 0, 1, &sampler_state_.GetInterfacePtr() ); + d3d_context_->OMSetRenderTargets( 1, &cube_view_.GetInterfacePtr(), cube_depth_view_ ); + + // ビューポートの設定 + D3D11_VIEWPORT vp; + vp.Width = 256;//client_width_; + vp.Height = 256;//client_height_; + vp.MinDepth = 0.0f; + vp.MaxDepth = 1.0f; + vp.TopLeftX = 0; + vp.TopLeftY = 0; + d3d_context_->RSSetViewports( 1, &vp ); + + d3d_context_->DrawIndexed( 36, 0, 0 ); + + d3d_context_->OMSetRenderTargets( 1, &view_.GetInterfacePtr(), depth_view_ ); + + float color[4] = { 1.0f, 0.0f, 0.0f, 0.0f }; + // 描画ターゲットのクリア + d3d_context_->ClearRenderTargetView(view_,color); + // 深度バッファのクリア + d3d_context_->ClearDepthStencilView( depth_view_, D3D11_CLEAR_DEPTH, 1.0f, 0 ); + + d3d_context_->PSSetShaderResources( 0, 1, &cube_shader_res_view_.GetInterfacePtr() ); + d3d_context_->PSSetSamplers( 0, 1, &cube_sampler_state_.GetInterfacePtr() ); + + + // ビューポートの設定 + vp.Width = width_;//client_width_; + vp.Height = height_;//client_height_; + vp.MinDepth = 0.0f; + vp.MaxDepth = 1.0f; + vp.TopLeftX = 0; + vp.TopLeftY = 0; + + d3d_context_->RSSetViewports( 1, &vp ); + + //cb_change_on_resize ccor; + ccor.mProjection = XMMatrixTranspose( mat_projection_ ); + // 定数バッファに格納 + d3d_context_->UpdateSubresource( cb_change_on_resize_, 0, NULL, &ccor, 0, 0 ); + + d3d_context_->DrawIndexed( 36, 0, 0 ); // 表示 @@ -1031,13 +1139,13 @@ namespace sf BLENDFUNCTION blend; blend.BlendOp = AC_SRC_OVER; blend.BlendFlags = 0; - blend.SourceConstantAlpha = 200; // 不透明度(レイヤードウィンドウ全体のアルファ値) - blend.AlphaFormat = AC_SRC_ALPHA; + blend.SourceConstantAlpha = 128; // 不透明度(レイヤードウィンドウ全体のアルファ値) + blend.AlphaFormat = 0;//AC_SRC_ALPHA; // デバイスコンテキストにおけるレイヤの位置 POINT po; po.x = po.y = 0; BOOL err; - err = UpdateLayeredWindow(hwnd_, ddc.get(), &wnd_pos, &wnd_size, sdc, &po, RGB(255,0,0), &blend, ULW_ALPHA | ULW_COLORKEY); + err = UpdateLayeredWindow(hwnd_, ddc.get(), &wnd_pos, &wnd_size, sdc, &po, RGB(255,0,0), &blend, ULW_ALPHA | ULW_COLORKEY ); BOOST_ASSERT(err == TRUE); surface->ReleaseDC( NULL); surface.Release();