@@ -496,28 +496,66 @@ namespace bgfx
496496 DX_RELEASE_I (factory5);
497497 }
498498
499- DXGI_SWAP_CHAIN_DESC scd;
500- scd.BufferDesc .Width = _scd.width ;
501- scd.BufferDesc .Height = _scd.height ;
502- scd.BufferDesc .RefreshRate .Numerator = 1 ;
503- scd.BufferDesc .RefreshRate .Denominator = 60 ;
504- scd.BufferDesc .Format = _scd.format ;
505- scd.BufferDesc .ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED;
506- scd.BufferDesc .Scaling = DXGI_MODE_SCALING_UNSPECIFIED;
507- scd.SampleDesc .Count = 1 ;
508- scd.SampleDesc .Quality = 0 ;
509- scd.BufferUsage = _scd.bufferUsage ;
510- scd.BufferCount = _scd.bufferCount ;
511- scd.OutputWindow = (HWND)_scd.nwh ;
512- scd.Windowed = _scd.windowed ;
513- scd.SwapEffect = _scd.swapEffect ;
514- scd.Flags = scdFlags;
515-
516- hr = m_factory->CreateSwapChain (
517- _device
518- , &scd
519- , reinterpret_cast <IDXGISwapChain**>(_swapChain)
499+ IDXGIFactory2* factory2;
500+ hr = m_factory->QueryInterface (IID_IDXGIFactory2, (void **)&factory2);
501+
502+ if (SUCCEEDED (hr) )
503+ {
504+ DX_RELEASE_I (factory2);
505+ DXGI_SWAP_CHAIN_DESC1 scd;
506+ scd.Width = _scd.width ;
507+ scd.Height = _scd.height ;
508+ scd.Format = _scd.format ;
509+ scd.Stereo = _scd.stereo ;
510+ scd.SampleDesc .Count = 1 ;
511+ scd.SampleDesc .Quality = 0 ;
512+ scd.BufferUsage = _scd.bufferUsage ;
513+ scd.BufferCount = _scd.bufferCount ;
514+ scd.Scaling = _scd.scaling ;
515+ scd.SwapEffect = _scd.swapEffect ;
516+ scd.AlphaMode = _scd.alphaMode ;
517+ scd.Flags = scdFlags;
518+
519+ DXGI_SWAP_CHAIN_FULLSCREEN_DESC scfd;
520+ scfd.RefreshRate .Numerator = 1 ;
521+ scfd.RefreshRate .Denominator = 60 ;
522+ scfd.ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED;
523+ scfd.Scaling = DXGI_MODE_SCALING_UNSPECIFIED;
524+ scfd.Windowed = _scd.windowed ;
525+
526+ hr = m_factory->CreateSwapChainForHwnd (
527+ _device
528+ , (HWND)_scd.nwh
529+ , &scd
530+ , &scfd, NULL
531+ , reinterpret_cast <IDXGISwapChain1**>(_swapChain)
520532 );
533+ }
534+ else
535+ {
536+ DXGI_SWAP_CHAIN_DESC scd;
537+ scd.BufferDesc .Width = _scd.width ;
538+ scd.BufferDesc .Height = _scd.height ;
539+ scd.BufferDesc .RefreshRate .Numerator = 1 ;
540+ scd.BufferDesc .RefreshRate .Denominator = 60 ;
541+ scd.BufferDesc .Format = _scd.format ;
542+ scd.BufferDesc .ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED;
543+ scd.BufferDesc .Scaling = DXGI_MODE_SCALING_UNSPECIFIED;
544+ scd.SampleDesc .Count = 1 ;
545+ scd.SampleDesc .Quality = 0 ;
546+ scd.BufferUsage = _scd.bufferUsage ;
547+ scd.BufferCount = _scd.bufferCount ;
548+ scd.OutputWindow = (HWND)_scd.nwh ;
549+ scd.Windowed = _scd.windowed ;
550+ scd.SwapEffect = _scd.swapEffect ;
551+ scd.Flags = scdFlags;
552+
553+ hr = m_factory->CreateSwapChain (
554+ _device
555+ , &scd
556+ , reinterpret_cast <IDXGISwapChain**>(_swapChain)
557+ );
558+ }
521559#else
522560 DXGI_SWAP_CHAIN_DESC1 scd;
523561 scd.Width = _scd.width ;
0 commit comments