首页 > 解决方案 > 如何修复抗锯齿系统的打印屏幕?

问题描述

打印屏幕功能:

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_READONLY | D3DLOCK_NOSYSLOCK)))

没有抗锯齿,打印屏幕可以完美运行。问题是什么 ?

标签: c++directxantialiasing

解决方案


推荐阅读