D3D: Make the global swapchain static again.

This commit is contained in:
Jules Blok 2014-07-26 13:00:49 +02:00
parent 6724ce6275
commit 06b13f12d3
3 changed files with 26 additions and 6 deletions

View file

@ -31,7 +31,7 @@ namespace D3D
ID3D11Device* device = nullptr;
ID3D11DeviceContext* context = nullptr;
IDXGISwapChain* swapchain = nullptr;
static IDXGISwapChain* swapchain = nullptr;
D3D_FEATURE_LEVEL featlevel;
D3DTexture2D* backbuf = nullptr;
HWND hWnd;
@ -492,6 +492,24 @@ void Present()
swapchain->Present((UINT)g_ActiveConfig.IsVSync(), 0);
}
HRESULT SetFullscreenState(bool enable_fullscreen)
{
return swapchain->SetFullscreenState(enable_fullscreen, nullptr);
}
HRESULT GetFullscreenState(bool* fullscreen_state)
{
if (fullscreen_state == nullptr)
{
return E_POINTER;
}
BOOL state;
HRESULT hr = swapchain->GetFullscreenState(&state, nullptr);
*fullscreen_state = !!state;
return hr;
}
} // namespace D3D
} // namespace DX11

View file

@ -40,7 +40,6 @@ void Close();
extern ID3D11Device* device;
extern ID3D11DeviceContext* context;
extern IDXGISwapChain* swapchain;
extern HWND hWnd;
extern bool bFrameInProgress;
@ -59,6 +58,9 @@ bool BGRATexturesSupported();
unsigned int GetMaxTextureSize();
HRESULT SetFullscreenState(bool enable_fullscreen);
HRESULT GetFullscreenState(bool* fullscreen_state);
// Ihis function will assign a name to the given resource.
// The DirectX debug layer will make it easier to identify resources that way,
// e.g. when listing up all resources who have unreleased references.

View file

@ -943,10 +943,10 @@ void Renderer::SwapImpl(u32 xfbAddr, u32 fbWidth, u32 fbHeight,const EFBRectangl
bool fullscreen_changed = s_last_fullscreen_mode != fullscreen;
BOOL fullscreen_state;
if (SUCCEEDED(D3D::swapchain->GetFullscreenState(&fullscreen_state, nullptr)))
bool fullscreen_state;
if (SUCCEEDED(D3D::GetFullscreenState(&fullscreen_state)))
{
if (!!fullscreen_state != fullscreen && Host_RendererHasFocus())
if (fullscreen_state != fullscreen && Host_RendererHasFocus())
{
// The current fullscreen state does not match the configuration,
// this may happen when the renderer frame loses focus. When the
@ -985,7 +985,7 @@ void Renderer::SwapImpl(u32 xfbAddr, u32 fbWidth, u32 fbHeight,const EFBRectangl
if (fullscreen_changed)
{
s_last_fullscreen_mode = fullscreen;
D3D::swapchain->SetFullscreenState(fullscreen, nullptr);
D3D::SetFullscreenState(fullscreen);
// Notify the host that it is safe to exit fullscreen
if (!fullscreen)