mirror of
https://github.com/gnif/LookingGlass.git
synced 2024-12-23 22:31:46 +00:00
[c-host] dxgi: only flag frame updates if there was actually an update
This commit is contained in:
parent
8df850023c
commit
942c417cbb
2 changed files with 15 additions and 12 deletions
|
@ -5,7 +5,7 @@ OUTPUT = looking-glass-host
|
||||||
EXT =
|
EXT =
|
||||||
|
|
||||||
CFLAGS = -std=gnu99 -Wall -Werror
|
CFLAGS = -std=gnu99 -Wall -Werror
|
||||||
CFLAGS += -g -O0
|
CFLAGS += -g -O3
|
||||||
CFLAGS += -I.
|
CFLAGS += -I.
|
||||||
CFLAGS += -I../common
|
CFLAGS += -I../common
|
||||||
|
|
||||||
|
|
|
@ -40,7 +40,7 @@ struct iface
|
||||||
D3D_FEATURE_LEVEL featureLevel;
|
D3D_FEATURE_LEVEL featureLevel;
|
||||||
IDXGIOutputDuplication * dup;
|
IDXGIOutputDuplication * dup;
|
||||||
ID3D11Texture2D * texture;
|
ID3D11Texture2D * texture;
|
||||||
bool hasFrame;
|
bool needsRelease;
|
||||||
|
|
||||||
unsigned int width;
|
unsigned int width;
|
||||||
unsigned int height;
|
unsigned int height;
|
||||||
|
@ -424,7 +424,7 @@ static CaptureResult dxgi_capture(bool * hasFrameUpdate, bool * hasPointerUpdate
|
||||||
switch(status)
|
switch(status)
|
||||||
{
|
{
|
||||||
case S_OK:
|
case S_OK:
|
||||||
this->hasFrame = true;
|
this->needsRelease = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DXGI_ERROR_WAIT_TIMEOUT:
|
case DXGI_ERROR_WAIT_TIMEOUT:
|
||||||
|
@ -447,17 +447,20 @@ static CaptureResult dxgi_capture(bool * hasFrameUpdate, bool * hasPointerUpdate
|
||||||
return CAPTURE_RESULT_ERROR;
|
return CAPTURE_RESULT_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
ID3D11DeviceContext_CopyResource(this->deviceContext,
|
if (frameInfo.LastPresentTime.QuadPart != 0)
|
||||||
(ID3D11Resource *)this->texture, (ID3D11Resource *)src);
|
{
|
||||||
|
ID3D11DeviceContext_CopyResource(this->deviceContext,
|
||||||
|
(ID3D11Resource *)this->texture, (ID3D11Resource *)src);
|
||||||
|
|
||||||
ID3D11Texture2D_Release(src);
|
ID3D11Texture2D_Release(src);
|
||||||
IDXGIResource_Release(res);
|
*hasFrameUpdate = true;
|
||||||
|
}
|
||||||
*hasFrameUpdate = true;
|
|
||||||
|
|
||||||
if (frameInfo.PointerShapeBufferSize > 0)
|
if (frameInfo.PointerShapeBufferSize > 0)
|
||||||
*hasPointerUpdate = true;
|
*hasPointerUpdate = true;
|
||||||
|
|
||||||
|
IDXGIResource_Release(res);
|
||||||
|
|
||||||
return CAPTURE_RESULT_OK;
|
return CAPTURE_RESULT_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -490,7 +493,7 @@ static bool dxgi_getFrame(CaptureFrame * frame)
|
||||||
static CaptureResult dxgi_releaseFrame()
|
static CaptureResult dxgi_releaseFrame()
|
||||||
{
|
{
|
||||||
assert(this);
|
assert(this);
|
||||||
if (!this->hasFrame)
|
if (!this->needsRelease)
|
||||||
return CAPTURE_RESULT_OK;
|
return CAPTURE_RESULT_OK;
|
||||||
|
|
||||||
HRESULT status = IDXGIOutputDuplication_ReleaseFrame(this->dup);
|
HRESULT status = IDXGIOutputDuplication_ReleaseFrame(this->dup);
|
||||||
|
@ -506,7 +509,7 @@ static CaptureResult dxgi_releaseFrame()
|
||||||
case WAIT_ABANDONED:
|
case WAIT_ABANDONED:
|
||||||
case DXGI_ERROR_ACCESS_LOST:
|
case DXGI_ERROR_ACCESS_LOST:
|
||||||
{
|
{
|
||||||
this->hasFrame = false;
|
this->needsRelease = false;
|
||||||
return CAPTURE_RESULT_REINIT;
|
return CAPTURE_RESULT_REINIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -515,7 +518,7 @@ static CaptureResult dxgi_releaseFrame()
|
||||||
return CAPTURE_RESULT_ERROR;
|
return CAPTURE_RESULT_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
this->hasFrame = false;
|
this->needsRelease = false;
|
||||||
return CAPTURE_RESULT_OK;
|
return CAPTURE_RESULT_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue