Skip to content

Commit 3ad8b4b

Browse files
committed
Use DXGI_SWAP_CHAIN_DESC1 if available for additional scaling options.
1 parent f534946 commit 3ad8b4b

File tree

1 file changed

+59
-21
lines changed

1 file changed

+59
-21
lines changed

src/dxgi.cpp

Lines changed: 59 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)