mirror of
https://github.com/doitsujin/dxvk.git
synced 2024-12-11 10:24:10 +01:00
[dxgi] Implement and use GetWindowClientSize fuction
This new function provides a cleaner way to retrieve a window's client size and can be used outside the swap chain functions.
This commit is contained in:
parent
1e393bf24d
commit
15078357dc
@ -127,5 +127,20 @@ namespace dxvk {
|
|||||||
|
|
||||||
return status == DISP_CHANGE_SUCCESSFUL ? S_OK : DXGI_ERROR_NOT_CURRENTLY_AVAILABLE;;
|
return status == DISP_CHANGE_SUCCESSFUL ? S_OK : DXGI_ERROR_NOT_CURRENTLY_AVAILABLE;;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void GetWindowClientSize(
|
||||||
|
HWND hWnd,
|
||||||
|
UINT* pWidth,
|
||||||
|
UINT* pHeight) {
|
||||||
|
RECT rect = { };
|
||||||
|
::GetClientRect(hWnd, &rect);
|
||||||
|
|
||||||
|
if (pWidth)
|
||||||
|
*pWidth = rect.right - rect.left;
|
||||||
|
|
||||||
|
if (pHeight)
|
||||||
|
*pHeight = rect.bottom - rect.top;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -85,5 +85,17 @@ namespace dxvk {
|
|||||||
HRESULT SetMonitorDisplayMode(
|
HRESULT SetMonitorDisplayMode(
|
||||||
HMONITOR hMonitor,
|
HMONITOR hMonitor,
|
||||||
const DXGI_MODE_DESC* pMode);
|
const DXGI_MODE_DESC* pMode);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Queries window client size
|
||||||
|
*
|
||||||
|
* \param [in] hWnd Window to query
|
||||||
|
* \param [out] pWidth Client width
|
||||||
|
* \param [out] pHeight Client height
|
||||||
|
*/
|
||||||
|
void GetWindowClientSize(
|
||||||
|
HWND hWnd,
|
||||||
|
UINT* pWidth,
|
||||||
|
UINT* pHeight);
|
||||||
|
|
||||||
}
|
}
|
@ -24,10 +24,9 @@ namespace dxvk {
|
|||||||
|
|
||||||
// Adjust initial back buffer size. If zero, these
|
// Adjust initial back buffer size. If zero, these
|
||||||
// shall be set to the current window size.
|
// shall be set to the current window size.
|
||||||
const VkExtent2D windowSize = GetWindowSize();
|
GetWindowClientSize(m_window,
|
||||||
|
m_desc.Width ? nullptr : &m_desc.Width,
|
||||||
if (m_desc.Width == 0) m_desc.Width = windowSize.width;
|
m_desc.Height ? nullptr : &m_desc.Height);
|
||||||
if (m_desc.Height == 0) m_desc.Height = windowSize.height;
|
|
||||||
|
|
||||||
// Create presenter, which also serves as an interface to the device
|
// Create presenter, which also serves as an interface to the device
|
||||||
if (FAILED(CreatePresenter(pDevice, &m_presenter)))
|
if (FAILED(CreatePresenter(pDevice, &m_presenter)))
|
||||||
@ -287,11 +286,13 @@ namespace dxvk {
|
|||||||
if (!IsWindow(m_window))
|
if (!IsWindow(m_window))
|
||||||
return DXGI_ERROR_INVALID_CALL;
|
return DXGI_ERROR_INVALID_CALL;
|
||||||
|
|
||||||
const VkExtent2D windowSize = GetWindowSize();
|
|
||||||
|
|
||||||
std::lock_guard<std::mutex> lock(m_lockBuffer);
|
std::lock_guard<std::mutex> lock(m_lockBuffer);
|
||||||
m_desc.Width = Width != 0 ? Width : windowSize.width;
|
m_desc.Width = Width;
|
||||||
m_desc.Height = Height != 0 ? Height : windowSize.height;
|
m_desc.Height = Height;
|
||||||
|
|
||||||
|
GetWindowClientSize(m_window,
|
||||||
|
m_desc.Width ? nullptr : &m_desc.Width,
|
||||||
|
m_desc.Height ? nullptr : &m_desc.Height);
|
||||||
|
|
||||||
if (BufferCount != 0)
|
if (BufferCount != 0)
|
||||||
m_desc.BufferCount = BufferCount;
|
m_desc.BufferCount = BufferCount;
|
||||||
@ -491,19 +492,6 @@ namespace dxvk {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
VkExtent2D DxgiSwapChain::GetWindowSize() const {
|
|
||||||
RECT windowRect;
|
|
||||||
|
|
||||||
if (!::GetClientRect(m_window, &windowRect))
|
|
||||||
windowRect = RECT();
|
|
||||||
|
|
||||||
VkExtent2D result;
|
|
||||||
result.width = windowRect.right;
|
|
||||||
result.height = windowRect.bottom;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
HRESULT DxgiSwapChain::EnterFullscreenMode(IDXGIOutput* pTarget) {
|
HRESULT DxgiSwapChain::EnterFullscreenMode(IDXGIOutput* pTarget) {
|
||||||
Com<IDXGIOutput> output = static_cast<DxgiOutput*>(pTarget);
|
Com<IDXGIOutput> output = static_cast<DxgiOutput*>(pTarget);
|
||||||
|
|
||||||
|
@ -183,8 +183,6 @@ namespace dxvk {
|
|||||||
HMONITOR m_monitor;
|
HMONITOR m_monitor;
|
||||||
WindowState m_windowState;
|
WindowState m_windowState;
|
||||||
|
|
||||||
VkExtent2D GetWindowSize() const;
|
|
||||||
|
|
||||||
HRESULT EnterFullscreenMode(
|
HRESULT EnterFullscreenMode(
|
||||||
IDXGIOutput *pTarget);
|
IDXGIOutput *pTarget);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user