OSDN Git Service

とりあえず黒い画面を表示
authorSFPGMR <sfpg@git.sourceforge.jp>
Tue, 28 Jun 2011 10:14:24 +0000 (19:14 +0900)
committerSFPGMR <sfpg@git.sourceforge.jp>
Tue, 28 Jun 2011 10:14:24 +0000 (19:14 +0900)
dxgi_test/exception.cpp
dxgi_test/stdafx.h
dxgi_test/toplevel_window.cpp

index 3030979..722072d 100644 (file)
@@ -61,7 +61,11 @@ std::map<HRESULT,std::wstring> com_error_  = boost::assign::list_of<std::pair<HR
        (AUDCLNT_E_INCORRECT_BUFFER_SIZE,L"AUDCLNT_E_INCORRECT_BUFFER_SIZE")
        (AUDCLNT_E_BUFFER_SIZE_ERROR,L"AUDCLNT_E_BUFFER_SIZE_ERROR")
        (AUDCLNT_S_BUFFER_EMPTY,L"AUDCLNT_S_BUFFER_EMPTY")
-       (AUDCLNT_S_THREAD_ALREADY_REGISTERED,L"AUDCLNT_S_THREAD_ALREADY_REGISTERED");
+       (AUDCLNT_S_THREAD_ALREADY_REGISTERED,L"AUDCLNT_S_THREAD_ALREADY_REGISTERED")
+  (DXGI_ERROR_UNSUPPORTED,L"DXGI_ERROR_UNSUPPORTED ")
+  (DXGI_STATUS_OCCLUDED,L"DXGI_STATUS_OCCLUDED")
+  (DXGI_STATUS_CLIPPED,L"DXGI_STATUS_CLIPPED")
+  ;
        
 
 win32_error_exception::win32_error_exception(uint32_t hr)
index e01b651..9338b01 100644 (file)
 #include "code_converter.h"
 #include "logger.h"
 #include "dout.h"
+#include "dxerr.h"
index d5c6dd1..a07f2af 100644 (file)
@@ -55,7 +55,131 @@ HRESULT EnableBlurBehind(HWND hwnd)
   }
   return hr;
 }
+
+// 汎用情報格納用
+struct mode_info 
+{
+  mode_info(const std::wstring& n,const std::wstring& d) : name(n),description(d) {}
+  std::wstring name;
+  std::wstring description;
+};
+
+// ディスプレイモード
+struct display_mode 
+{
+  display_mode(const std::wstring& n,const std::wstring& d) : name(n),description(d) {}
+  std::wstring name;
+  std::wstring description;
+};
+
+std::vector<mode_info> display_modes = 
+  boost::assign::list_of<mode_info>
+(L"DXGI_FORMAT_UNKNOWN",L"フォーマットが不明")
+(L"DXGI_FORMAT_R32G32B32A32_TYPELESS",L"4 成分、128 ビット型なしフォーマット 1")
+(L"DXGI_FORMAT_R32G32B32A32_FLOAT",L"4 成分、128 ビット浮動小数点フォーマット 1")
+(L"DXGI_FORMAT_R32G32B32A32_UINT",L"4 成分、128 ビット符号なし整数フォーマット 1")
+(L"DXGI_FORMAT_R32G32B32A32_SINT",L"4 成分、128 ビット符号付き整数フォーマット 1")
+(L"DXGI_FORMAT_R32G32B32_TYPELESS",L"3 成分、96 ビット型なしフォーマット")
+(L"DXGI_FORMAT_R32G32B32_FLOAT",L"3 成分、96 ビット浮動小数点フォーマット")
+(L"DXGI_FORMAT_R32G32B32_UINT",L"3 成分、96 ビット符号なし整数フォーマット")
+(L"DXGI_FORMAT_R32G32B32_SINT",L"3 成分、96 ビット符号付き整数フォーマット")
+(L"DXGI_FORMAT_R16G16B16A16_TYPELESS",L"4 成分、64 ビット型なしフォーマット")
+(L"DXGI_FORMAT_R16G16B16A16_FLOAT",L"4 成分、64 ビット浮動小数点フォーマット")
+(L"DXGI_FORMAT_R16G16B16A16_UNORM",L"4 成分、64 ビット符号なし整数フォーマット")
+(L"DXGI_FORMAT_R16G16B16A16_UINT",L"4 成分、64 ビット符号なし整数フォーマット")
+(L"DXGI_FORMAT_R16G16B16A16_SNORM",L"4 成分、64 ビット符号付き整数フォーマット")
+(L"DXGI_FORMAT_R16G16B16A16_SINT",L"4 成分、64 ビット符号付き整数フォーマット")
+(L"DXGI_FORMAT_R32G32_TYPELESS",L"2 成分、64 ビット型なしフォーマット")
+(L"DXGI_FORMAT_R32G32_FLOAT",L"2 成分、64 ビット浮動小数点フォーマット")
+(L"DXGI_FORMAT_R32G32_UINT",L"2 成分、64 ビット符号なし整数フォーマット")
+(L"DXGI_FORMAT_R32G32_SINT",L"2 成分、64 ビット符号付き整数フォーマット")
+(L"DXGI_FORMAT_R32G8X24_TYPELESS",L"2 成分、64 ビット型なしフォーマット")
+(L"DXGI_FORMAT_D32_FLOAT_S8X24_UINT",L"32 ビット浮動小数点成分、および 2 つの符号なし整数成分です (追加の 32 ビットを含む)。")
+(L"DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS",L"32 ビット浮動小数点成分、および 2 つの型なし成分です (追加の 32 ビットを含む)。")
+(L"DXGI_FORMAT_X32_TYPELESS_G8X24_UINT",L"32 ビット型なし成分、および 2 つの符号なし整数成分です (追加の 32 ビットを含む)。")
+(L"DXGI_FORMAT_R10G10B10A2_TYPELESS",L"4 成分、32 ビット型なしフォーマット")
+(L"DXGI_FORMAT_R10G10B10A2_UNORM",L"4 成分、32 ビット符号なし整数フォーマット")
+(L"DXGI_FORMAT_R10G10B10A2_UINT",L"4 成分、32 ビット符号なし整数フォーマット")
+(L"DXGI_FORMAT_R11G11B10_FLOAT",L"3 成分、32 ビット浮動小数点フォーマット")
+(L"DXGI_FORMAT_R8G8B8A8_TYPELESS",L"3 成分、32 ビット型なしフォーマット")
+(L"DXGI_FORMAT_R8G8B8A8_UNORM",L"4 成分、32 ビット符号なし整数フォーマット")
+(L"DXGI_FORMAT_R8G8B8A8_UNORM_SRGB",L"4 成分、32 ビット符号なし正規化整数 sRGB フォーマット")
+(L"DXGI_FORMAT_R8G8B8A8_UINT",L"4 成分、32 ビット符号なし整数フォーマット")
+(L"DXGI_FORMAT_R8G8B8A8_SNORM",L"3 成分、32 ビット符号付き整数フォーマット")
+(L"DXGI_FORMAT_R8G8B8A8_SINT",L"3 成分、32 ビット符号付き整数フォーマット")
+(L"DXGI_FORMAT_R16G16_TYPELESS",L"2 成分、32 ビット型なしフォーマット")
+(L"DXGI_FORMAT_R16G16_FLOAT",L"2 成分、32 ビット浮動小数点フォーマット")
+(L"DXGI_FORMAT_R16G16_UNORM",L"2 成分、32 ビット符号なし整数フォーマット")
+(L"DXGI_FORMAT_R16G16_UINT",L"2 成分、32 ビット符号なし整数フォーマット")
+(L"DXGI_FORMAT_R16G16_SNORM",L"2 成分、32 ビット符号付き整数フォーマット")
+(L"DXGI_FORMAT_R16G16_SINT",L"2 成分、32 ビット符号付き整数フォーマット")
+(L"DXGI_FORMAT_R32_TYPELESS",L"1 成分、32 ビット型なしフォーマット")
+(L"DXGI_FORMAT_D32_FLOAT",L"1 成分、32 ビット浮動小数点フォーマット")
+(L"DXGI_FORMAT_R32_FLOAT",L"1 成分、32 ビット浮動小数点フォーマット")
+(L"DXGI_FORMAT_R32_UINT",L"1 成分、32 ビット符号なし整数フォーマット")
+(L"DXGI_FORMAT_R32_SINT",L"1 成分、32 ビット符号付き整数フォーマット")
+(L"DXGI_FORMAT_R24G8_TYPELESS",L"2 成分、32 ビット型なしフォーマット")
+(L"DXGI_FORMAT_D24_UNORM_S8_UINT",L"深度チャンネルに 24 ビット、ステンシル チャンネルに 8 ビットを使用する 32 ビット Z バッファー フォーマット")
+(L"DXGI_FORMAT_R24_UNORM_X8_TYPELESS",L"1 成分、24 ビット符号なし正規化整数と追加の型なし 8 ビットを含む、32 ビット フォーマット")
+(L"DXGI_FORMAT_X24_TYPELESS_G8_UINT",L"1 成分、24 ビット型なしフォーマットと追加の 8 ビット符号なし整数成分を含む、32 ビット フォーマット")
+(L"DXGI_FORMAT_R8G8_TYPELESS",L"2 成分、16 ビット型なしフォーマット")
+(L"DXGI_FORMAT_R8G8_UNORM",L"2 成分、16 ビット符号なし整数フォーマット")
+(L"DXGI_FORMAT_R8G8_UINT",L"2 成分、16 ビット符号なし整数フォーマット")
+(L"DXGI_FORMAT_R8G8_SNORM",L"2 成分、16 ビット符号付き整数フォーマット")
+(L"DXGI_FORMAT_R8G8_SINT",L"2 成分、16 ビット符号付き整数フォーマット")
+(L"DXGI_FORMAT_R16_TYPELESS",L"1 成分、16 ビット型なしフォーマット")
+(L"DXGI_FORMAT_R16_FLOAT",L"1 成分、16 ビット浮動小数点フォーマット")
+(L"DXGI_FORMAT_D16_UNORM",L"1 成分、16 ビット符号なし正規化整数フォーマット")
+(L"DXGI_FORMAT_R16_UNORM",L"1 成分、16 ビット符号なし整数フォーマット")
+(L"DXGI_FORMAT_R16_UINT",L"1 成分、16 ビット符号なし整数フォーマット")
+(L"DXGI_FORMAT_R16_SNORM",L"1 成分、16 ビット符号付き整数フォーマット")
+(L"DXGI_FORMAT_R16_SINT",L"1 成分、16 ビット符号付き整数フォーマット")
+(L"DXGI_FORMAT_R8_TYPELESS",L"1 成分、8 ビット型なしフォーマット")
+(L"DXGI_FORMAT_R8_UNORM",L"1 成分、8 ビット符号なし整数フォーマット")
+(L"DXGI_FORMAT_R8_UINT",L"1 成分、8 ビット符号なし整数フォーマット")
+(L"DXGI_FORMAT_R8_SNORM",L"1 成分、8 ビット符号付き整数フォーマット")
+(L"DXGI_FORMAT_R8_SINT",L"1 成分、8 ビット符号付き整数フォーマット")
+(L"DXGI_FORMAT_A8_UNORM",L"1 成分、8 ビット符号なし整数フォーマット")
+(L"DXGI_FORMAT_R1_UNORM",L"1 成分、1 ビット符号なし正規化整数フォーマット 2.")
+(L"DXGI_FORMAT_R9G9B9E5_SHAREDEXP",L"4 成分、32 ビット浮動小数点フォーマット 2.")
+(L"DXGI_FORMAT_R8G8_B8G8_UNORM",L"4 成分、32 ビット符号なし正規化整数フォーマット 3")
+(L"DXGI_FORMAT_G8R8_G8B8_UNORM",L"4 成分、32 ビット符号なし正規化整数フォーマット 3")
+(L"DXGI_FORMAT_BC1_TYPELESS",L"4 成分、型なしブロック圧縮フォーマット")
+(L"DXGI_FORMAT_BC1_UNORM",L"4 成分、ブロック圧縮フォーマット")
+(L"DXGI_FORMAT_BC1_UNORM_SRGB",L"sRGB データ用の 4 成分、ブロック圧縮フォーマット")
+(L"DXGI_FORMAT_BC2_TYPELESS",L"4 成分、型なしブロック圧縮フォーマット")
+(L"DXGI_FORMAT_BC2_UNORM",L"4 成分、ブロック圧縮フォーマット")
+(L"DXGI_FORMAT_BC2_UNORM_SRGB",L"sRGB データ用の 4 成分、ブロック圧縮フォーマット")
+(L"DXGI_FORMAT_BC3_TYPELESS",L"4 成分、型なしブロック圧縮フォーマット")
+(L"DXGI_FORMAT_BC3_UNORM",L"4 成分、ブロック圧縮フォーマット")
+(L"DXGI_FORMAT_BC3_UNORM_SRGB",L"sRGB データ用の 4 成分、ブロック圧縮フォーマット")
+(L"DXGI_FORMAT_BC4_TYPELESS",L"1 成分、型なしブロック圧縮フォーマット")
+(L"DXGI_FORMAT_BC4_UNORM",L"1 成分、ブロック圧縮フォーマット")
+(L"DXGI_FORMAT_BC4_SNORM",L"1 成分、ブロック圧縮フォーマット")
+(L"DXGI_FORMAT_BC5_TYPELESS",L"2 成分、型なしブロック圧縮フォーマット")
+(L"DXGI_FORMAT_BC5_UNORM",L"2 成分、ブロック圧縮フォーマット")
+(L"DXGI_FORMAT_BC5_SNORM",L"2 成分、ブロック圧縮フォーマット")
+(L"DXGI_FORMAT_B5G6R5_UNORM",L"3 成分、16 ビット符号なし正規化整数フォーマット")
+(L"DXGI_FORMAT_B5G5R5A1_UNORM",L"1 ビット アルファをサポートする 4 成分、16 ビット符号なし正規化整数フォーマット")
+(L"DXGI_FORMAT_B8G8R8A8_UNORM",L"8 ビット アルファをサポートする 4 成分、16 ビット符号なし正規化整数フォーマット")
+(L"DXGI_FORMAT_B8G8R8X8_UNORM",L"4 成分、16 ビット符号なし正規化整数フォーマット")
+(L"DXGI_FORMAT_FORCE_UINT",L"コンパイル時に、この列挙型のサイズを 32 ビットにするために定義されています。この値を指定しない場合、一部のコンパイラでは列挙型を 32 ビット以外のサイズでコンパイル可能この定数が使用されることはありません。");
+
+// スキャンライン情報
+
+std::vector<mode_info> scanline_orders = 
+  boost::assign::list_of<mode_info>
+  (L"DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED",L"走査線の順序が指定されていません。")
+  (L"DXGI_MODE_SCANLINE_ORDER_PROGRESSIVE",L"イメージは先頭の走査線~最後の走査線から作成され、スキップされる走査線はありません。")
+  (L"DXGI_MODE_SCANLINE_ORDER_UPPER_FIELD_FIRST",L"イメージが上部のフィールドから作成されます。")
+  (L"DXGI_MODE_SCANLINE_ORDER_LOWER_FIELD_FIRST",L"イメージが下部のフィールドから作成されます。");
+
+    // スケーリングパラメータ
+    std::vector<mode_info> scalings = boost::assign::list_of<mode_info>
+      (L"DXGI_MODE_SCALING_UNSPECIFIED",L"スケーリングが指定されていません。")
+      (L"DXGI_MODE_SCALING_CENTERED",L"スケーリングなしを指定します。イメージはディスプレイの中央に配置されます。通常、このフラグは固定ドットピッチ ディスプレイ (LED ディスプレイなど) に使用します。")
+      (L"DXGI_MODE_SCALING_STRETCHED",L"拡大スケーリングを指定します。");
+
 struct toplevel_window::impl : public base_win32_window
 {
 
@@ -89,6 +213,14 @@ struct toplevel_window::impl : public base_win32_window
       break;
     case WM_SIZE:
       {
+        // バックバッファなどに関係するインターフェースを解放する
+        // バックバッファを解放する
+        if(swap_chain_)
+        {
+          swap_chain_->ResizeBuffers(0,0,0,DXGI_FORMAT_B8G8R8A8_UNORM,DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH);
+        }
+        // バックバッファなどに関係するインターフェースを再作成する
+
         //if (render_target_)
         //{
         //     D2D1_SIZE_U size;
@@ -203,6 +335,10 @@ struct toplevel_window::impl : public base_win32_window
   virtual void discard_device()
   {
     safe_release(render_target_);
+    safe_release(swap_chain_);
+    safe_release(d3d_context_);
+    safe_release(d3d_device_);
+    safe_release(adapter_);
   }
 
   virtual void create_device(){
@@ -210,54 +346,101 @@ struct toplevel_window::impl : public base_win32_window
     HRESULT hr = S_OK;
 
     //ウィンドウの現在の幅、高さを求める
+
     RECT rc;
     GetClientRect( hwnd_, &rc );
     uint32_t width = rc.right - rc.left;
     uint32_t height = rc.bottom - rc.top;
 
-    {
-      //wic_imaging_factory_.CreateInstance(CLSID_WICImagingFactory);
-      //                       bitmap_ = load_bitmap_from_file(render_target_,wic_imaging_factory_,L"myship.png");
-    }
+    // アダプタデバイス情報の取得
+    //LARGE_INTEGER version;
+    THROW_IFERR(dxgi_factory_->EnumAdapters1(0,&adapter_));
+    //THROW_IFERR(adapter_->CheckInterfaceSupport( __uuidof(ID3D10Device),&version));
+    
+    
+    // D3DDeviceの作成
+
+    std::vector<D3D_FEATURE_LEVEL> feature_levels = 
+      boost::assign::list_of<D3D_FEATURE_LEVEL>
+    (   D3D_FEATURE_LEVEL_11_0 )        // DirectX11対応GPU
+    (    D3D_FEATURE_LEVEL_10_1)        // DirectX10.1対応GPU
+    (   D3D_FEATURE_LEVEL_10_0 );       // DirectX10対応GPU
+
+    D3D_FEATURE_LEVEL level;
+    THROW_IFERR(::D3D11CreateDevice(
+      adapter_,
+      D3D_DRIVER_TYPE_UNKNOWN ,
+      NULL,
+      D3D11_CREATE_DEVICE_BGRA_SUPPORT,
+      &feature_levels[0],
+      feature_levels.size(),
+      D3D11_SDK_VERSION,
+      &d3d_device_,
+      &level,
+      &d3d_context_));
+
 
 
-    if(!render_target_)
-    {
-      RECT rc;
-      GetClientRect(hwnd_, &rc);
 
-      D2D1_SIZE_U size = D2D1::SizeU(
-        rc.right - rc.left,
-        rc.bottom - rc.top
-        );
+    // スワップチェーンの作成
+    {
+      DXGI_SWAP_CHAIN_DESC desc = {};
       
-      const D2D1_PIXEL_FORMAT format =
-          D2D1::PixelFormat(DXGI_FORMAT_B8G8R8A8_UNORM,
-                            D2D1_ALPHA_MODE_PREMULTIPLIED);
+                       desc.BufferDesc.Width = width;
+      desc.BufferDesc.Height = height;
+      desc.BufferDesc.Format   = DXGI_FORMAT_B8G8R8A8_UNORM;
+                       desc.SampleDesc.Count   = 1;
+                       desc.BufferUsage                        = DXGI_USAGE_RENDER_TARGET_OUTPUT;
+                       desc.BufferCount                        = 1;
+                       desc.OutputWindow               = hwnd_;
+                       desc.SwapEffect                 = DXGI_SWAP_EFFECT_DISCARD;
+                       desc.Windowed                   = TRUE;
+      desc.Flags = DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH;
       
-      const D2D1_RENDER_TARGET_PROPERTIES target_prop = 
-          D2D1::RenderTargetProperties(D2D1_RENDER_TARGET_TYPE_DEFAULT,format);
-
-      THROW_IFERR(factory_->CreateHwndRenderTarget(
-        target_prop,
-        D2D1::HwndRenderTargetProperties(hwnd_, size,D2D1_PRESENT_OPTIONS_IMMEDIATELY),
-        &render_target_
-        ));
-      // Create a DC render target 
-      //D2D1_RENDER_TARGET_PROPERTIES props = D2D1::RenderTargetProperties(
-      //       D2D1_RENDER_TARGET_TYPE_DEFAULT,
-      //       D2D1::PixelFormat(
-      //               DXGI_FORMAT_B8G8R8A8_UNORM,
-      //               D2D1_ALPHA_MODE_IGNORE
-      //               ) , 0.0, 0.0,
-      //       D2D1_RENDER_TARGET_USAGE_GDI_COMPATIBLE
-      //       );
-
-      //THROW_IFERR(factory_->CreateDCRenderTarget(
-      //       &props,
-      //       &render_target_
-      //       ));
+      THROW_IFERR(dxgi_factory_->CreateSwapChain(d3d_device_,&desc,&swap_chain_));
+      //wic_imaging_factory_.CreateInstance(CLSID_WICImagingFactory);
+      //                       bitmap_ = load_bitmap_from_file(render_target_,wic_imaging_factory_,L"myship.png");
     }
+
+    // DXGIスワップチェーンの作成(デフォルトアダプタ)
+
+    //if(!render_target_)
+    //{
+    //  RECT rc;
+    //  GetClientRect(hwnd_, &rc);
+
+    //  D2D1_SIZE_U size = D2D1::SizeU(
+    //    rc.right - rc.left,
+    //    rc.bottom - rc.top
+    //    );
+    //  
+    //  const D2D1_PIXEL_FORMAT format =
+    //      D2D1::PixelFormat(DXGI_FORMAT_B8G8R8A8_UNORM,
+    //                        D2D1_ALPHA_MODE_PREMULTIPLIED);
+    //  
+    //  const D2D1_RENDER_TARGET_PROPERTIES target_prop = 
+    //      D2D1::RenderTargetProperties(D2D1_RENDER_TARGET_TYPE_DEFAULT,format);
+
+    //  THROW_IFERR(factory_->CreateHwndRenderTarget(
+    //    target_prop,
+    //    D2D1::HwndRenderTargetProperties(hwnd_, size,D2D1_PRESENT_OPTIONS_IMMEDIATELY),
+    //    &render_target_
+    //    ));
+    //  // Create a DC render target 
+    //  //D2D1_RENDER_TARGET_PROPERTIES props = D2D1::RenderTargetProperties(
+    //  //     D2D1_RENDER_TARGET_TYPE_DEFAULT,
+    //  //     D2D1::PixelFormat(
+    //  //             DXGI_FORMAT_B8G8R8A8_UNORM,
+    //  //             D2D1_ALPHA_MODE_IGNORE
+    //  //             ) , 0.0, 0.0,
+    //  //     D2D1_RENDER_TARGET_USAGE_GDI_COMPATIBLE
+    //  //     );
+
+    //  //THROW_IFERR(factory_->CreateDCRenderTarget(
+    //  //     &props,
+    //  //     &render_target_
+    //  //     ));
+    //}
   }
 
   virtual void create_device_independent_resources()
@@ -267,7 +450,7 @@ struct toplevel_window::impl : public base_win32_window
 
     if(!dxgi_factory_)
     {
-      THROW_IFERR(CreateDXGIFactory1(dxgi_factory_.GetIID(),reinterpret_cast<void**>(&dxgi_factory_)));
+      THROW_IFERR(CreateDXGIFactory1(__uuidof(IDXGIFactory1),reinterpret_cast<void**>(&dxgi_factory_)));
       get_dxgi_information();
     }
 
@@ -318,44 +501,48 @@ struct toplevel_window::impl : public base_win32_window
   void render(){
 
     static int t = 0;
-
-    if (render_target_)
+    if(swap_chain_)
     {
-      ++t;
-      // Retrieve the size of the render target.
-      D2D1_SIZE_F renderTargetSize = render_target_->GetSize();
-      try {
-        render_target_->BeginDraw();
-        render_target_->Clear(D2D1::ColorF(0,0.0f));
-//        render_target_->FillRectangle(D2D1::RectF(0.0f,0.0f,renderTargetSize.width,renderTargetSize.height),);
-         
-//          (D2D1::ColorF(0,1.0f));
-        render_target_->SetTransform(D2D1::Matrix3x2F::Identity());
-        ID2D1SolidColorBrushPtr brush;
-        render_target_->CreateSolidColorBrush(D2D1::ColorF(D2D1::ColorF::OrangeRed), &brush);
-
-        std::wstring m(L"TEST");
-        render_target_->DrawTextW(
-          m.c_str(),
-          m.size(),
-          write_text_format_,
-          layout_rect_, 
-          brush);
-        THROW_IFERR(render_target_->EndDraw());
-
-      } catch(sf::win32_error_exception& err)
-      {
-        if(err.hresult() == D2DERR_RECREATE_TARGET)
-        {
-          discard_device();
-          create_device();
-        } else {
-          throw;
-        }
-      } catch(...) {
-        throw;
-      }
+      swap_chain_->Present(0,0);
     }
+
+//    if (render_target_)
+//    {
+//      ++t;
+//      // Retrieve the size of the render target.
+//      D2D1_SIZE_F renderTargetSize = render_target_->GetSize();
+//      try {
+//        render_target_->BeginDraw();
+//        render_target_->Clear(D2D1::ColorF(0,0.0f));
+////        render_target_->FillRectangle(D2D1::RectF(0.0f,0.0f,renderTargetSize.width,renderTargetSize.height),);
+//         
+////          (D2D1::ColorF(0,1.0f));
+//        render_target_->SetTransform(D2D1::Matrix3x2F::Identity());
+//        ID2D1SolidColorBrushPtr brush;
+//        render_target_->CreateSolidColorBrush(D2D1::ColorF(D2D1::ColorF::OrangeRed), &brush);
+//
+//        std::wstring m(L"Direct2D TEST");
+//        render_target_->DrawTextW(
+//          m.c_str(),
+//          m.size(),
+//          write_text_format_,
+//          layout_rect_, 
+//          brush);
+//        THROW_IFERR(render_target_->EndDraw());
+//
+//      } catch(sf::win32_error_exception& err)
+//      {
+//        if(err.hresult() == D2DERR_RECREATE_TARGET)
+//        {
+//          discard_device();
+//          create_device();
+//        } else {
+//          throw;
+//        }
+//      } catch(...) {
+//        throw;
+//      }
+//    }
   }
 
   void create_window()
@@ -381,6 +568,7 @@ struct toplevel_window::impl : public base_win32_window
   void get_dxgi_information()
   {
     int i = 0;
+
     while(1){
       IDXGIAdapter1Ptr adapter;
       HRESULT hr = dxgi_factory_->EnumAdapters1(i,&adapter);
@@ -390,12 +578,15 @@ struct toplevel_window::impl : public base_win32_window
       }
       DXGI_ADAPTER_DESC1 desc;
       adapter->GetDesc1(&desc);
-      adapter->CheckInterfaceSupport();
+      //adapter->CheckInterfaceSupport();
+      
       wdout << desc.Description << std::endl;
       wdout << desc.DedicatedVideoMemory << std::endl;
       IDXGIDevice1Ptr device;
 
       uint32_t oi = 0;
+
+
       while(1)
       {
         IDXGIOutputPtr output;        
@@ -404,6 +595,26 @@ struct toplevel_window::impl : public base_win32_window
         }
         DXGI_OUTPUT_DESC output_desc;
         output->GetDesc(&output_desc); 
+        UINT num = 0;
+        DXGI_FORMAT format = DXGI_FORMAT_R8G8B8A8_UNORM_SRGB;
+        UINT flags         = DXGI_ENUM_MODES_INTERLACED | DXGI_ENUM_MODES_SCALING;
+
+        output->GetDisplayModeList(format,flags,&num,0);
+        boost::shared_array<DXGI_MODE_DESC> disp_modes(new DXGI_MODE_DESC[num]);
+        output->GetDisplayModeList(format,flags,&num,&disp_modes[0]);
+        //output->GetFrameStatistics
+        for(uint32_t mode_index = 0;mode_index < num;++mode_index)
+        {
+          DXGI_MODE_DESC& mode(disp_modes[mode_index]);
+          wdout << boost::wformat(L"Format: %s %s \n Width: %d Height: %d RefleshRate: %d/%d Scaling:%s %s \n Scanline: %s %s ")
+            %  display_modes[mode.Format].name % display_modes[mode.Format].description
+            %  mode.Width % mode.Height 
+            %  mode.RefreshRate.Numerator % mode.RefreshRate.Denominator
+            %  scalings[mode.Scaling].name %  scalings[mode.Scaling].description
+            %  scanline_orders[mode.ScanlineOrdering].name
+            %  scanline_orders[mode.ScanlineOrdering].description
+            << std::endl;
+        }
 //        output->
         wdout << output_desc.DeviceName << std::endl; 
         oi++;
@@ -420,6 +631,10 @@ private:
   sf::timer timer_;
 
   IDXGIFactory1Ptr dxgi_factory_;
+  IDXGIAdapter1Ptr adapter_;
+  ID3D11DevicePtr d3d_device_;
+  ID3D11DeviceContextPtr d3d_context_;
+
   //IDXGISwapChainPtr; 
   ID2D1FactoryPtr factory_;
   ID2D1HwndRenderTargetPtr render_target_;