微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Direct3D9“清除”功能未清除

如何解决Direct3D9“清除”功能未清除

因此,我试图清除一个窗口使其完全变为蓝色,但是由于某些原因,D3D9的“ Clear()”功能将无法正常工作。我已经完成了错误检查,所以我100%知道失败的是Clear()函数,而不是其他事情。我已经用我以前编码过的代码检查过它,因此我不知道为什么它不起作用。 Clear()的返回值为“ -2005530516”,尽管我在网上找不到任何有关其含义的信息。有什么想法吗?

#include "DirectX.h"

LPDIRECT3D9 d3d;
LPDIRECT3DDEVICE9 d3ddev;

int InitD3D(HWND hWnd)
{
    d3d = Direct3DCreate9(D3D_SDK_VERSION);

    if (d3d == nullptr)
        return -1;

    D3DPRESENT_ParaMETERS d3dpp;
    ZeroMemory(&d3dpp,sizeof(d3dpp));

    d3dpp.Windowed = true;
    d3dpp.SwapEffect = D3DSWAPEFFECT_disCARD;
    d3dpp.hDeviceWindow = hWnd;

    d3d->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hWnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING,&d3dpp,&d3ddev);

    if (d3ddev == nullptr)
        return -1;

    return 0;
}

int CreateBoard()
{
    D3DRECT rect;
    rect = { 100,50,200,100 };
    
    //d3ddev->Clear(1,&rect,D3DCLEAR_TARGET,D3DCOLOR_XRGB(0,255),1.0f,NULL);
    HRESULT result = d3ddev->Clear(0,NULL,NULL);

    if (result == D3DERR_INVALIDCALL)
    {
        MessageBoxA(NULL,"ERROR: Failed TO CLEAR","ERROR",MB_ICONERROR);
        return result;
    }
    return 0;
}

void CleanD3D()
{
    d3d->Release();
    d3ddev->Release();
}

解决方法

值“ -2005530516”是HRESULT的十进制版本(通常打印为十六进制数字)。是D3DERR_INVALIDCALL。当然,您要分配该值:

if (result = D3DERR_INVALIDCALL)

你是说吗?

if (result == D3DERR_INVALIDCALL)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。