Direct3D:从纹理中创建渲染目标视图

Direct3D: Creating a render target view from a texture

本文关键字:目标 视图 创建 纹理 Direct3D      更新时间:2023-10-16

我想从纹理中创建一个渲染目标视图,用于多目标渲染。我目前能够为后台缓冲区创建一个渲染目标视图——所有这些都工作得很好。此外,我能够创建纹理。然而,当我试图从中构建视图时,我得到了一个错误。

首先,下面是代码:

D3D11_TEXTURE2D_DESC textureDesc;
ZeroMemory(&textureDesc, sizeof(textureDesc));
textureDesc.ArraySize = 1;
textureDesc.BindFlags = D3D11_BIND_RENDER_TARGET | D3D11_BIND_SHADER_RESOURCE;
textureDesc.CPUAccessFlags = 0;
textureDesc.Format = DXGI_FORMAT_R32_FLOAT;
textureDesc.Height = m_renderTargetSize.Height;
textureDesc.Width = m_renderTargetSize.Width;
textureDesc.MipLevels = 1;
textureDesc.MiscFlags = 0;
textureDesc.SampleDesc.Count = 1;
textureDesc.SampleDesc.Quality = 0;
textureDesc.Usage = D3D11_USAGE_DEFAULT;
ComPtr<ID3D11Texture2D> texture;
DX::ThrowIfFailed(
    m_d3dDevice->CreateTexture2D(
        &textureDesc,
        nullptr,
        &texture
        )
    );
D3D11_RENDER_TARGET_VIEW_DESC renderTargetViewDescription;
ZeroMemory(&renderTargetViewDescription, sizeof(renderTargetViewDescription));
renderTargetViewDescription.Format = textureDesc.Format;
DX::ThrowIfFailed(
    m_d3dDevice->CreateRenderTargetView(
        texture,
        &renderTargetViewDescription,
        &m_renderTargetView[1]
        )
    );

我在调用CreateRenderTargetView的行上从编译器获得以下错误:

错误:没有合适的转换函数"Microsoft::WRL::ComPtr"转换为"ID3D11Resource *"存在。

根据MSDN, ID3D11Texture2D继承自ID3D11Resource。我必须先上推吗?

我在DirectX 11中工作,并与vc110编译。

似乎WRL的ComPtr不支持隐式转换到T*(不像ATL的CComPtr),所以你需要使用Get方法:

DX::ThrowIfFailed(
    m_d3dDevice->CreateRenderTargetView(
        texture.Get(),
        &renderTargetViewDescription,
        &m_renderTargetView[1]
        )
    );