#include "sf_windows.h"\r
#include "exception.h"\r
\r
+#pragma comment(lib,"dxerr.lib")\r
#pragma comment( lib, "dxguid.lib" )\r
#pragma comment( lib, "d3d11.lib" )\r
#pragma comment( lib, "d3dx11.lib" )\r
\r
namespace sf \r
{\r
+ HRESULT EnableBlurBehind(HWND hwnd)\r
+ {\r
+ HRESULT hr = S_OK;\r
+\r
+ ////Create and populate the BlurBehind structre\r
+ //DWM_BLURBEHIND bb = {0};\r
+ ////Enable Blur Behind and Blur Region;\r
+ //bb.dwFlags = DWM_BB_ENABLE;\r
+ //bb.fEnable = true;\r
+ //bb.hRgnBlur = NULL;\r
+\r
+ ////Enable Blur Behind\r
+ //hr = DwmEnableBlurBehindWindow(hwnd, &bb);\r
+ //if (SUCCEEDED(hr))\r
+ //{\r
+ // //do more things\r
+ MARGINS mgn = {-1};\r
+ hr = DwmExtendFrameIntoClientArea( hwnd, &mgn );\r
+ /* }*/\r
+ return hr;\r
+ }\r
+\r
// 汎用情報格納用\r
struct mode_info \r
{\r
case WM_LBUTTONDOWN:\r
return on_left_mouse_button_down(\r
wParam,dpi_.scale_x(\r
- GET_X_LPARAM(lParam)),dpi_.scale_y(GET_Y_LPARAM(lParam)))\r
- ;\r
+ GET_X_LPARAM(lParam)),dpi_.scale_y(GET_Y_LPARAM(lParam)))\r
+ ;\r
;\r
case WM_LBUTTONUP:\r
return on_left_mouse_button_up(\r
wParam,dpi_.scale_x(\r
- GET_X_LPARAM(lParam)),dpi_.scale_y(GET_Y_LPARAM(lParam)))\r
- ;\r
+ GET_X_LPARAM(lParam)),dpi_.scale_y(GET_Y_LPARAM(lParam)))\r
+ ;\r
case WM_LBUTTONDBLCLK:\r
return on_left_mouse_button_double_click(wParam,\r
dpi_.scale_x(\r
- GET_X_LPARAM(lParam)),dpi_.scale_y(GET_Y_LPARAM(lParam)))\r
- ;\r
+ GET_X_LPARAM(lParam)),dpi_.scale_y(GET_Y_LPARAM(lParam)))\r
+ ;\r
case WM_MOUSEMOVE:\r
{\r
- return on_mouse_move(wParam,\r
- dpi_.scale_x(\r
+ return on_mouse_move(wParam,\r
+ dpi_.scale_x(\r
GET_X_LPARAM(lParam)),dpi_.scale_y(GET_Y_LPARAM(lParam)))\r
;\r
// on_mouse_move(GET_X_LPARAM(lParam),GET_Y_LPARAM(lParam),wParam); \r
case WM_MOUSEWHEEL:\r
return on_mouse_wheel(GET_KEYSTATE_WPARAM(wParam),GET_WHEEL_DELTA_WPARAM(wParam),\r
dpi_.scale_x(\r
- GET_X_LPARAM(lParam)),dpi_.scale_y(GET_Y_LPARAM(lParam)))\r
- ;\r
+ GET_X_LPARAM(lParam)),dpi_.scale_y(GET_Y_LPARAM(lParam)))\r
+ ;\r
case WM_MOUSELEAVE:\r
return on_mouse_leave() ;\r
case WM_KEYDOWN:\r
return other_window_proc(hwnd,message,wParam,lParam);\r
\r
};\r
- \r
- template <typename ProcType> \r
+\r
+ template <typename ProcType> \r
void base_win32_window<ProcType>::register_class (\r
const wchar_t * menu_name,\r
uint32_t style ,\r
\r
\r
// Windowを作成する\r
- CreateWindow(\r
+ // Windowを作成する\r
+ CreateWindowEx(\r
+ WS_EX_APPWINDOW | WS_EX_LAYERED ,\r
name_.c_str(),\r
title_.c_str(),\r
WS_OVERLAPPEDWINDOW,\r
CW_USEDEFAULT,\r
CW_USEDEFAULT,\r
static_cast<uint32_t>(dpi_.scale_x(width_)),\r
- static_cast<uint32_t>(dpi_.scale_y(height_)),\r
+ static_cast<uint32_t>(dpi_.scale_x(height_)),\r
NULL,\r
NULL,\r
HINST_THISCOMPONENT,\r
::GetWindowPlacement(hwnd_,&wp_);\r
}\r
\r
- \r
+\r
//void base_win32_window::show() \r
//{\r
// //HRESULT hr = S_OK;\r
\r
template <typename ProcType> \r
base_win32_window<ProcType>::base_win32_window(const std::wstring& title,const std::wstring& name,bool fit_to_display,float width,float height)\r
- : title_(title),name_(name),fit_to_display_(fit_to_display),width_(width),height_(height),thunk_(this,reinterpret_cast<ProcType::proc_type>(base_win32_window::WndProc)),hwnd_(0),timer_(*this,100)\r
+ : title_(title),name_(name),fit_to_display_(fit_to_display),width_(width),height_(height),thunk_(this,reinterpret_cast<ProcType::proc_type>(base_win32_window::WndProc)),hwnd_(0),timer_(*this,10)\r
{\r
memset(&wp_,0,sizeof(wp_));\r
wp_.length = sizeof(WINDOWPLACEMENT);\r
template <typename ProcType> \r
void base_win32_window<ProcType>::create_device_independent_resources()\r
{\r
- \r
+\r
// DXGI Factory の 生成\r
\r
if(!dxgi_factory_)\r
\r
template <typename ProcType> \r
void base_win32_window<ProcType>::create_device(){\r
- calc_client_size();\r
+ calc_client_size();\r
HRESULT hr = S_OK;\r
init_ = false;\r
- \r
+ RECT rc;\r
+ GetWindowRect(hwnd_,&rc);\r
+\r
// アダプタデバイス情報の取得\r
//LARGE_INTEGER version;\r
THROW_IFERR(dxgi_factory_->EnumAdapters1(0,&adapter_));\r
\r
// MSAA\r
DXGI_SAMPLE_DESC msaa;\r
- for(int i = 0; i <= D3D11_MAX_MULTISAMPLE_SAMPLE_COUNT; i++){\r
- UINT q;\r
- if SUCCEEDED(d3d_device_->CheckMultisampleQualityLevels(DXGI_FORMAT_D24_UNORM_S8_UINT, i, &q)){\r
- if(1 < q){\r
- msaa.Count = i;\r
- msaa.Quality = q - 1;\r
+ for(int i = 0; i <= D3D11_MAX_MULTISAMPLE_SAMPLE_COUNT; i++){\r
+ UINT q;\r
+ if SUCCEEDED(d3d_device_->CheckMultisampleQualityLevels(DXGI_FORMAT_D24_UNORM_S8_UINT, i, &q)){\r
+ if(1 < q){\r
+ msaa.Count = i;\r
+ msaa.Quality = q - 1;\r
break;\r
- }\r
- }\r
- }\r
+ }\r
+ }\r
+ }\r
\r
// 表示モード\r
DXGI_MODE_DESC desired_desc = {} , actual_desc = {};\r
// 各色8ビットで符号化なし正規化数\r
- desired_desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM_SRGB;\r
+ desired_desc.Format = DXGI_FORMAT_B8G8R8A8_UNORM_SRGB;\r
desired_desc.Height = client_height_;// 高さ\r
desired_desc.Width = client_width_;// 幅\r
desired_desc.Scaling = DXGI_MODE_SCALING_CENTERED;// スケーリングなし\r
// リフレッシュレートを60Hzを要求する\r
+\r
desired_desc.RefreshRate.Numerator = 60000;\r
desired_desc.RefreshRate.Denominator = 1000;\r
// 近いモードを検索\r
desc.SampleDesc.Count = 1;\r
desc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;\r
desc.BufferCount = 1;\r
-// desc.SampleDesc = msaa;\r
+ // desc.SampleDesc = msaa;\r
desc.OutputWindow = hwnd_;\r
- // desc.SwapEffect = DXGI_SWAP_EFFECT_;\r
+ //desc.SwapEffect = DXGI_SWAP_EFFECT_DISCARD;\r
desc.Windowed = TRUE;\r
- desc.Flags = DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH;\r
+ desc.Flags = DXGI_SWAP_CHAIN_FLAG_GDI_COMPATIBLE;\r
\r
THROW_IFERR(dxgi_factory_->CreateSwapChain(d3d_device_,&desc,&swap_chain_));\r
\r
compile_flag |= D3DCOMPILE_DEBUG;\r
#endif\r
HRESULT hr = D3DX11CompileFromFile( L"dxgi_test.fx", NULL, NULL, "VS", "vs_5_0", \r
- compile_flag, 0, NULL, &vsblob, &vserrblob, NULL );\r
+ compile_flag, 0, NULL, &vsblob, &vserrblob, NULL );\r
if( FAILED( hr ) )\r
{\r
- if( vserrblob != NULL )\r
- OutputDebugStringA( (char*)vserrblob->GetBufferPointer() );\r
- if( vserrblob ) vserrblob.Release();\r
- throw sf::win32_error_exception(hr);\r
+ if( vserrblob != NULL )\r
+ OutputDebugStringA( (char*)vserrblob->GetBufferPointer() );\r
+ if( vserrblob ) vserrblob.Release();\r
+ throw sf::win32_error_exception(hr);\r
}\r
\r
// バーテックスシェーダの生成\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
+ 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.Release();\r
+ // 入力頂点レイアウトの生成\r
+ THROW_IFERR(d3d_device_->CreateInputLayout( layout, ARRAYSIZE(layout), vsblob->GetBufferPointer(),\r
+ vsblob->GetBufferSize(), &input_layout_ ));\r
+ vsblob.Release();\r
}\r
\r
// 入力レイアウトの設定\r
compile_flag |= D3DCOMPILE_DEBUG;\r
#endif\r
HRESULT hr = D3DX11CompileFromFile( L"dxgi_test.fx", NULL, NULL, "PS", "ps_5_0", \r
- compile_flag, 0, NULL, &psblob, &pserror, NULL );\r
+ compile_flag, 0, NULL, &psblob, &pserror, NULL );\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
+ if( pserror != NULL )\r
+ OutputDebugStringA( (char*)pserror->GetBufferPointer() );\r
+ safe_release(pserror);\r
+ throw sf::win32_error_exception(hr);\r
}\r
\r
// ピクセルシェーダの作成\r
}\r
\r
// バーテックスバッファの作成\r
- // Create vertex buffer\r
+ // Create vertex buffer\r
simple_vertex vertices[] =\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
+ { 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
// インデックスバッファの生成\r
WORD indices[] =\r
{\r
- 3,1,0,\r
- 2,1,3,\r
+ 3,1,0,\r
+ 2,1,3,\r
\r
- 6,4,5,\r
- 7,4,6,\r
+ 6,4,5,\r
+ 7,4,6,\r
\r
- 11,9,8,\r
- 10,9,11,\r
+ 11,9,8,\r
+ 10,9,11,\r
\r
- 14,12,13,\r
- 15,12,14,\r
+ 14,12,13,\r
+ 15,12,14,\r
\r
- 19,17,16,\r
- 18,17,19,\r
+ 19,17,16,\r
+ 18,17,19,\r
\r
- 22,20,21,\r
- 23,20,22\r
+ 22,20,21,\r
+ 23,20,22\r
};\r
\r
bd.Usage = D3D11_USAGE_DEFAULT;\r
bd.BindFlags = D3D11_BIND_CONSTANT_BUFFER;\r
bd.CPUAccessFlags = 0;\r
THROW_IFERR(d3d_device_->CreateBuffer( &bd, NULL, &cb_never_changes_ ));\r
- \r
+\r
bd.ByteWidth = sizeof(cb_change_on_resize);\r
THROW_IFERR(d3d_device_->CreateBuffer( &bd, NULL, &cb_change_on_resize_ ));\r
- \r
+\r
bd.ByteWidth = sizeof(cb_changes_every_frame);\r
THROW_IFERR(d3d_device_->CreateBuffer( &bd, NULL, &cb_changes_every_frame_ ));\r
\r
d3d_context_->UpdateSubresource( cb_never_changes_, 0, NULL, &cnc, 0, 0 );\r
\r
// 投影行列のセットアップ\r
- mat_projection_ = XMMatrixPerspectiveFovLH( XM_PIDIV4, client_width_ / client_height_, 0.01f, 100.0f );\r
+\r
+ mat_projection_ = XMMatrixPerspectiveFovLH( XM_PIDIV4, /*(rc.right - rc.left)/(rc.bottom - rc.top)*/client_width_ / client_height_, 0.01f, 100.0f );\r
cb_change_on_resize ccor;\r
ccor.mProjection = XMMatrixTranspose( mat_projection_ );\r
// 定数バッファに格納\r
init_ = true;// 初期化完了\r
}\r
\r
- template <typename ProcType> \r
+ template <typename ProcType> \r
void base_win32_window<ProcType>::create_swapchain_dependent_resources()\r
{\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
\r
+ RECT rc;\r
+ GetWindowRect(hwnd_,&rc);\r
// 深度バッファの作成\r
D3D11_TEXTURE2D_DESC depth = {} ;\r
- depth.Width = client_width_;\r
- depth.Height = client_height_;\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
\r
// OMステージに登録する\r
d3d_context_->OMSetRenderTargets( 1, &view_.GetInterfacePtr(), depth_view_ );\r
- \r
+\r
// ビューポートの設定\r
D3D11_VIEWPORT vp;\r
- vp.Width = client_width_;\r
- vp.Height = client_height_;\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
d3d_context_->RSSetViewports( 1, &vp );\r
}\r
\r
- template <typename ProcType> \r
+ template <typename ProcType> \r
void base_win32_window<ProcType>::discard_swapchain_dependent_resources()\r
{\r
safe_release(depth_view_);\r
safe_release(dxgi_factory_);\r
}\r
\r
- template <typename ProcType> \r
+ template <typename ProcType> \r
void base_win32_window<ProcType>::get_dxgi_information()\r
{\r
int i = 0;\r
DXGI_ADAPTER_DESC1 desc;\r
adapter->GetDesc1(&desc);\r
//adapter->CheckInterfaceSupport();\r
- \r
+\r
wdout << desc.Description << std::endl;\r
wdout << desc.DedicatedVideoMemory << std::endl;\r
IDXGIDevice1Ptr device;\r
% scanline_orders[mode.ScanlineOrdering].description\r
<< std::endl;\r
}\r
-// output->\r
+ // output->\r
wdout << output_desc.DeviceName << std::endl; \r
oi++;\r
}\r
{\r
calc_client_size();\r
discard_swapchain_dependent_resources();\r
- swap_chain_->ResizeBuffers(0,0,0,DXGI_FORMAT_B8G8R8A8_UNORM,DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH);\r
+ swap_chain_->ResizeBuffers(0,0,0,DXGI_FORMAT_B8G8R8A8_UNORM_SRGB,DXGI_SWAP_CHAIN_FLAG_GDI_COMPATIBLE);\r
create_swapchain_dependent_resources();\r
// 投影行列のセットアップ\r
mat_projection_ = XMMatrixPerspectiveFovLH( XM_PIDIV4, client_width_ / client_height_, 0.01f, 100.0f );\r
return std::is_same<proc_t,wndproc>::value?0:FALSE; \r
}\r
\r
- template <typename ProcType>\r
- typename base_win32_window<ProcType>::result_t base_win32_window<ProcType>::on_create(CREATESTRUCT *p)\r
- {\r
- create_device();\r
- //timer_.start();\r
- return std::is_same<proc_t,wndproc>::value?0:FALSE;\r
- }\r
-\r
- template <typename ProcType>\r
- typename base_win32_window<ProcType>::result_t base_win32_window<ProcType>::on_paint() \r
- {\r
- sf::paint_struct p(hwnd_);\r
- render();\r
- return std::is_same<proc_t,wndproc>::value?0:FALSE;\r
- }\r
-\r
- template <typename ProcType>\r
- void base_win32_window<ProcType>::render()\r
- {\r
- static float t = 0.0f;\r
-\r
- static DWORD time_start = 0;\r
-\r
- if(init_)\r
- {\r
-\r
- float color[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; \r
-\r
- // 描画ターゲットのクリア\r
- d3d_context_->ClearRenderTargetView(view_,color);\r
- // 深度バッファのクリア\r
- d3d_context_->ClearDepthStencilView( depth_view_, D3D11_CLEAR_DEPTH, 1.0f, 0 );\r
-\r
- DWORD time_count = GetTickCount();\r
- if( time_start == 0 )\r
- time_start = time_count;\r
- t = ( time_count - time_start ) / 1000.0f;\r
-\r
- // Y軸で回転させる\r
- mat_world_ = XMMatrixRotationY( t );\r
-\r
- // 色の変更\r
- mesh_color_.x = ( sinf( t * 1.0f ) + 1.0f ) * 0.5f;\r
- mesh_color_.y = ( cosf( t * 3.0f ) + 1.0f ) * 0.5f;\r
- mesh_color_.z = ( sinf( t * 5.0f ) + 1.0f ) * 0.5f;\r
-\r
-\r
- // 定数更新\r
- cb_changes_every_frame cb;\r
-\r
- cb.mWorld = XMMatrixTranspose( mat_world_ );\r
- cb.vLightColor = mesh_color_;\r
- d3d_context_->UpdateSubresource( cb_changes_every_frame_, 0, NULL, &cb, 0, 0 );\r
-\r
- // 立方体の描画\r
- d3d_context_->VSSetShader( v_shader_, NULL, 0 );\r
- d3d_context_->VSSetConstantBuffers( 0, 1, &cb_never_changes_.GetInterfacePtr() );\r
- d3d_context_->VSSetConstantBuffers( 1, 1, &cb_change_on_resize_.GetInterfacePtr() );\r
- d3d_context_->VSSetConstantBuffers( 2, 1, &cb_changes_every_frame_.GetInterfacePtr() );\r
- d3d_context_->PSSetShader( p_shader_, NULL, 0 );\r
- d3d_context_->PSSetConstantBuffers( 2, 1, &cb_changes_every_frame_.GetInterfacePtr() );\r
- d3d_context_->PSSetShaderResources( 0, 1, &shader_res_view_.GetInterfacePtr() );\r
- d3d_context_->PSSetSamplers( 0, 1, &sampler_state_.GetInterfacePtr() );\r
+ template <typename ProcType>\r
+ typename base_win32_window<ProcType>::result_t base_win32_window<ProcType>::on_create(CREATESTRUCT *p)\r
+ {\r
+ // DWM API\r
+ //BOOL dwmEnable;\r
+ //DwmIsCompositionEnabled (&dwmEnable); \r
+ //if (dwmEnable) EnableBlurBehind(hwnd_);\r
+ //DwmEnableComposition(DWM_EC_DISABLECOMPOSITION );\r
+\r
+ // ウィンドウ全体を半透明にする\r
+ //SetLayeredWindowAttributes(\r
+ // hwnd_,\r
+ // RGB(0,0,0), // color key\r
+ // 100, // alpha value\r
+ // LWA_ALPHA | LWA_COLORKEY);\r
+\r
+ // ウィンドウの指定領域を半透明にする\r
+\r
+ create_device();\r
+\r
+ timer_.start();\r
+ //show();\r
+ show();\r
+ text(title_);\r
+ return std::is_same<proc_t,wndproc>::value?0:FALSE;\r
+ }\r
\r
- d3d_context_->DrawIndexed( 36, 0, 0 );\r
+ template <typename ProcType>\r
+ typename base_win32_window<ProcType>::result_t base_win32_window<ProcType>::on_paint() \r
+ {\r
+ //{\r
+ sf::paint_struct p(hwnd_);\r
+ // gdi_object<HBRUSH> brush(::CreateSolidBrush(RGB(255,0,0)));\r
+ // {\r
+ // FillRect(p->hdc,&p->rcPaint,brush);\r
+ // }\r
+ //}\r
+ render();\r
+ return std::is_same<proc_t,wndproc>::value?0:FALSE;\r
+ }\r
\r
- // 表示\r
- swap_chain_->Present(1,0);\r
+ template <typename ProcType>\r
+ void base_win32_window<ProcType>::render()\r
+ {\r
+ static float t = 0.0f;\r
+ static DWORD time_start = 0;\r
+ if(init_)\r
+ {\r
\r
- }\r
+ float color[4] = { 1.0f, 0.0f, 0.0f, 0.0f }; \r
+\r
+\r
+ // 描画ターゲットのクリア\r
+ d3d_context_->ClearRenderTargetView(view_,color);\r
+ // 深度バッファのクリア\r
+ d3d_context_->ClearDepthStencilView( depth_view_, D3D11_CLEAR_DEPTH, 1.0f, 0 );\r
+\r
+ DWORD time_count = GetTickCount();\r
+ if( time_start == 0 )\r
+ time_start = time_count;\r
+ t = ( time_count - time_start ) / 1000.0f;\r
+\r
+ // Y軸で回転させる\r
+ mat_world_ = XMMatrixRotationY( t );\r
+\r
+ // 色の変更\r
+ mesh_color_.x = ( sinf( t * 1.0f ) + 1.0f ) * 0.5f;\r
+ mesh_color_.y = ( cosf( t * 3.0f ) + 1.0f ) * 0.5f;\r
+ mesh_color_.z = ( sinf( t * 5.0f ) + 1.0f ) * 0.5f;\r
+\r
+\r
+ // 定数更新\r
+ cb_changes_every_frame cb;\r
+\r
+ cb.mWorld = XMMatrixTranspose( mat_world_ );\r
+ cb.vLightColor = mesh_color_;\r
+ d3d_context_->UpdateSubresource( cb_changes_every_frame_, 0, NULL, &cb, 0, 0 );\r
+\r
+ // 立方体の描画\r
+ d3d_context_->VSSetShader( v_shader_, NULL, 0 );\r
+ d3d_context_->VSSetConstantBuffers( 0, 1, &cb_never_changes_.GetInterfacePtr() );\r
+ d3d_context_->VSSetConstantBuffers( 1, 1, &cb_change_on_resize_.GetInterfacePtr() );\r
+ d3d_context_->VSSetConstantBuffers( 2, 1, &cb_changes_every_frame_.GetInterfacePtr() );\r
+ d3d_context_->PSSetShader( p_shader_, NULL, 0 );\r
+ d3d_context_->PSSetConstantBuffers( 2, 1, &cb_changes_every_frame_.GetInterfacePtr() );\r
+ d3d_context_->PSSetShaderResources( 0, 1, &shader_res_view_.GetInterfacePtr() );\r
+ d3d_context_->PSSetSamplers( 0, 1, &sampler_state_.GetInterfacePtr() );\r
+\r
+ d3d_context_->DrawIndexed( 36, 0, 0 );\r
+\r
+ // 表示\r
+ swap_chain_->Present(1,0);\r
+\r
+ // 画面に転送\r
+ IDXGISurface1Ptr surface;\r
+ THROW_IF_ERR(swap_chain_->GetBuffer(0, __uuidof(IDXGISurface1), (void**) &surface));\r
+ HDC sdc;\r
+ THROW_IF_ERR(surface->GetDC( FALSE, &sdc ));\r
+ get_dc ddc(hwnd_);\r
+ RECT rc;\r
+ GetWindowRect(hwnd_,&rc);\r
+ POINT wnd_pos = {rc.left,rc.top};\r
+ SIZE wnd_size = {client_width_,client_height_};\r
+ BLENDFUNCTION blend;\r
+ blend.BlendOp = AC_SRC_OVER;\r
+ blend.BlendFlags = 0;\r
+ blend.SourceConstantAlpha = 128; // 不透明度(レイヤードウィンドウ全体のアルファ値)\r
+ blend.AlphaFormat = AC_SRC_ALPHA;\r
+ // デバイスコンテキストにおけるレイヤの位置\r
+ POINT po;\r
+ po.x = po.y = 0;\r
+ UpdateLayeredWindow(hwnd_, ddc.get(), &wnd_pos, &wnd_size, sdc, &po, RGB(255,0,0), &blend, ULW_ALPHA | ULW_COLORKEY);\r
+ surface->ReleaseDC( NULL);\r
+ surface.Release();\r
+ // OMステージに登録する\r
+ d3d_context_->OMSetRenderTargets( 1, &view_.GetInterfacePtr(), depth_view_ );\r
+ }\r
\r
- }\r
+ }\r
\r
template struct base_win32_window<wndproc>;\r
template struct base_win32_window<dlgproc>;\r
\r
subclass_window::subclass_window(HWND hwnd) \r
: base_win32_window (\r
- std::wstring(L""),std::wstring(L""),false,0,0\r
+ std::wstring(L""),std::wstring(L""),false,0,0\r
),is_subclassed_(false)\r
{\r
attach(hwnd);\r
\r
subclass_window::subclass_window()\r
: base_win32_window (\r
- std::wstring(L""),std::wstring(L""),false,0,0\r
+ std::wstring(L""),std::wstring(L""),false,0,0\r
),is_subclassed_(false)\r
{\r
\r