【问题标题】:Direct3D9 "Clear" Function Not ClearingDirect3D9“清除”功能未清除
【发布时间】:2020-09-03 02:05:08
【问题描述】:

所以我试图清除一个窗口以完全变蓝,但由于某种原因,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, 0, 255), 1.0f, NULL);
    HRESULT result = d3ddev->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 255), 1.0f, NULL);

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

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

【问题讨论】:

    标签: c++ directx-9 direct3d9


    【解决方案1】:

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

    if (result = D3DERR_INVALIDCALL)
    

    你的意思是?

    if (result == D3DERR_INVALIDCALL)
    

    【讨论】:

    • 是的,我做到了。我不知道我是怎么错过的,哈哈。猜猜这不是 Clear() 函数不起作用,我现在必须重新访问我的 InitD3D 函数。你看有什么不对吗?感谢您找到它。
    猜你喜欢
    • 1970-01-01
    • 2023-03-23
    • 2013-11-19
    • 1970-01-01
    • 2011-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多