【问题标题】:DirectX 11 mipmapsDirectX 11 贴图
【发布时间】:2015-07-06 09:57:44
【问题描述】:

如何在 DirectX 中创建纹理 mipmap?这是我的代码,我尝试这样做,但它不起作用:

    D3D11_TEXTURE2D_DESC desc{};
    desc.Width = dims.X;!
    desc.Height = dims.Y;
    desc.ArraySize = 1;
    desc.SampleDesc.Count = 1;
    desc.Format = DXGI_FORMAT_B8G8R8A8_UNORM;
    desc.BindFlags = D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET;
    desc.MiscFlags = D3D11_RESOURCE_MISC_GENERATE_MIPS;

    D3D11_SUBRESOURCE_DATA initData{};
    initData.pSysMem = pixels;
    initData.SysMemPitch = sizeof(unsigned char) * dims.X * 4;

    D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc{};
    srvDesc.Format = desc.Format;
    srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D;
    srvDesc.Texture2D.MipLevels = 1;

    Device->CreateTexture2D(&desc, nullptr, Texture.GetAddressOf());
    Device->CreateShaderResourceView(Texture.Get(), &srvDesc, ShaderResource.GetAddressOf());
    DeviceContext->UpdateSubresource(Texture.Get(), 0, 0, pixels, initData.SysMemPitch, 0);
    DeviceContext->GenerateMips(ShaderResource.Get());

Texture now looks like this

【问题讨论】:

  • 启用调试设备后,您是否遇到任何错误? DirectX Tool Kit 中的 WICTextureLoader 和 DDSTextureLoader 模块可选地支持自动生成 mips,因此您也可以查看该源。主要问题可能是srvDesc.Texture2D.MipLevels = 1; 将 SRV 设置为单个图像——即没有 mips。
  • desc.Width = dims.X;! 你的代码中真的有那个额外的感叹号吗?

标签: directx-11


【解决方案1】:

好的,我将 srvDesc.Texture2D.MipLevels 更改为 -1,现在它可以工作了。谢谢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多