CreateTexture2D fail... (d3d)

CreateTexture2D fail... (d3d)

本文关键字:d3d fail CreateTexture2D      更新时间:2023-10-16

我正在尝试创建带有分期用法的D3D纹理2D。

始终,它失败了错误:"不正确参数"(代码0x80070057)...

我不明白,除了分阶段没有问题,我可以创建其他问题,但不能成功...请在我的计算机飞过窗户之前帮助我...请...

这是有问题的代码:

    int w = 128;
    int h = 128;

    ID3D11Texture2D * tex;
    D3D11_TEXTURE2D_DESC tdesc;
    D3D11_SUBRESOURCE_DATA tbsd;
    ZeroMemory(&tdesc, sizeof(D3D10_TEXTURE2D_DESC));
    WORD *buf = new WORD[128*128];
    for (int i = 0; i < h; i++)
    for (int j = 0; j < w; j++)
    {
            buf[i*128 + j] = (WORD) 0xffffffff;
    }
    tbsd.pSysMem = (void *)buf;
    tbsd.SysMemPitch = w * 4;
    tbsd.SysMemSlicePitch = w * h * 4;
    tdesc.Width = w;
    tdesc.Height = h;
    tdesc.MipLevels = 1;
    tdesc.ArraySize = 1;
    tdesc.SampleDesc.Count = 1;
    tdesc.SampleDesc.Quality = 0;
    tdesc.Usage = D3D11_USAGE_STAGING;
    tdesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
    tdesc.BindFlags = D3D11_BIND_SHADER_RESOURCE;
    tdesc.CPUAccessFlags = D3D11_CPU_ACCESS_READ;
//  tdesc.CPUAccessFlags = D3D11_CPU_ACCESS_READ | D3D11_CPU_ACCESS_WRITE;  // Does'nt work either...
    tdesc.MiscFlags = 0;
    HRESULT eblah = 0; char tmpstr[128];
    eblah = device->CreateTexture2D(&tdesc, &tbsd, &tex);
    if (FAILED(eblah))
    {
        wsprintfA(tmpstr, "Error code : %lX", eblah); OutputDebugStringA(tmpstr);
        ErrorMessage(eblah);
    }

在以下情况下,我已经在代码的早期中将这个作为设备。 ID3D11DEVICE*设备= nullptr; d3d_feature_level级别; id3d11devicecontext* context = nullptr;

    HRESULT hr = D3D11CreateDevice(
        nullptr,
        D3D_DRIVER_TYPE::D3D_DRIVER_TYPE_NULL,    // Tried D3D_DRIVER_TYPE_HARDWARE too
        nullptr,
        0,
        nullptr,
        0,
        D3D11_SDK_VERSION,
        &device,
        &level,
        &context
        );

找到了它:

_我在创建设备时使用了d3d11_create_device_flag :: d3d11_create_device_debug标志,这给了我非常有用的调试信息。每个初学者必须拥有一个!

_ tdesc.bindflags创建用于登台的ID3D11TEXTURE2D时必须为0。

_我的计算机没有飞过窗口!

对每个人的美好一天:)