fix bug #2 that causes crash after returning from UAC.
This commit is contained in:
Binary file not shown.
@@ -113,10 +113,11 @@ void Monitor::Render(UINT timeout)
|
|||||||
{
|
{
|
||||||
if (!deskDupl_) return;
|
if (!deskDupl_) return;
|
||||||
|
|
||||||
|
HRESULT hr;
|
||||||
ComPtr<IDXGIResource> resource;
|
ComPtr<IDXGIResource> resource;
|
||||||
DXGI_OUTDUPL_FRAME_INFO frameInfo;
|
DXGI_OUTDUPL_FRAME_INFO frameInfo;
|
||||||
|
|
||||||
const auto hr = deskDupl_->AcquireNextFrame(timeout, &frameInfo, &resource);
|
hr = deskDupl_->AcquireNextFrame(timeout, &frameInfo, &resource);
|
||||||
if (FAILED(hr))
|
if (FAILED(hr))
|
||||||
{
|
{
|
||||||
switch (hr)
|
switch (hr)
|
||||||
@@ -191,9 +192,30 @@ void Monitor::Render(UINT timeout)
|
|||||||
UpdateMetadata(frameInfo);
|
UpdateMetadata(frameInfo);
|
||||||
UpdateCursor(frameInfo);
|
UpdateCursor(frameInfo);
|
||||||
|
|
||||||
if (FAILED(deskDupl_->ReleaseFrame()))
|
hr = deskDupl_->ReleaseFrame();
|
||||||
|
if (FAILED(hr))
|
||||||
{
|
{
|
||||||
Debug::Error("Monitor::Render() => ReleaseFrame() failed.");
|
switch (hr)
|
||||||
|
{
|
||||||
|
case DXGI_ERROR_ACCESS_LOST:
|
||||||
|
{
|
||||||
|
Debug::Log("Monitor::Render() => DXGI_ERROR_ACCESS_LOST.");
|
||||||
|
state_ = State::AccessLost;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case DXGI_ERROR_INVALID_CALL:
|
||||||
|
{
|
||||||
|
Debug::Error("Monitor::Render() => DXGI_ERROR_INVALID_CALL.");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
state_ = State::Unknown;
|
||||||
|
Debug::Error("Monitor::Render() => Unknown Error.");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user