Как исправить принтскрин для системы anti_aliasing? - PullRequest
0 голосов
/ 12 апреля 2020

Функция экрана печати:

HRESULT hr;
LPDIRECT3DSURFACE8 lpSurface;
D3DSURFACE_DESC stSurfaceDesc;

if (FAILED(hr = ms_lpd3dDevice->GetBackBuffer(0, D3DBACKBUFFER_TYPE_MONO, &lpSurface)))
{
    TraceError("Failed to get back buffer (0x%08x)", hr);
    return false;
}

if (FAILED(hr = lpSurface->GetDesc(&stSurfaceDesc)))
{
    TraceError("Failed to get surface desc (0x%08x)", hr);
    SAFE_RELEASE(lpSurface);
    return false;
}

UINT uWidth = stSurfaceDesc.Width;
UINT uHeight = stSurfaceDesc.Height;

switch( stSurfaceDesc.Format ) {
case D3DFMT_R8G8B8 :
case D3DFMT_A8R8G8B8 :
case D3DFMT_X8R8G8B8 :
case D3DFMT_R5G6B5 :
case D3DFMT_X1R5G5B5 :
case D3DFMT_A1R5G5B5 :
    break;
case D3DFMT_A4R4G4B4 :
case D3DFMT_R3G3B2 :
case D3DFMT_A8R3G3B2 :
case D3DFMT_X4R4G4B4 :
case D3DFMT_A2B10G10R10 :
    TraceError("Unsupported BackBuffer Format(%d). Please contact Administrator.", stSurfaceDesc.Format);
    SAFE_RELEASE(lpSurface);


    return false;
}

D3DLOCKED_RECT lockRect;
if (FAILED(hr = lpSurface->LockRect(&lockRect, NULL, D3DLOCK_NO_DIRTY_UPDATE | D3DLOCK_READONLY | D3DLOCK_NOSYSLOCK)))
{
    TraceError("Failed to lock the surface (0x%08x)", hr);
    SAFE_RELEASE(lpSurface);
    return false;
}

Ошибка:

if (FAILED (hr = lpSurface-> LockRect (& lockRect, NULL, D3DLOCK_NO_DIRTY_UPDATE | D3DLOCK_READLY) | D3DLOCK_NOSYSLOCK)))

Без сглаживания экран печати работает отлично. В чем проблема?

...