1

複数のターゲット レンダリングで使用するために、テクスチャからレンダー ターゲット ビューを作成したいと考えています。現在、バック バッファー用のレンダー ターゲット ビューを作成できます。すべてうまく機能します。さらに、テクスチャを作成することができます。ただし、そこからビューを構築しようとすると、エラーが発生します。

まず、コードは次のとおりです。

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 でコンパイルしています。

4

1 に答える 1

2

WRL の ComPtr は (ATL の CComPtr とは異なり) T* への暗黙的な変換をサポートしていないようです。そのため、Get メソッドを使用する必要があります。

DX::ThrowIfFailed(
    m_d3dDevice->CreateRenderTargetView(
        texture.Get(),
        &renderTargetViewDescription,
        &m_renderTargetView[1]
        )
    );
于 2013-03-09T04:24:34.547 に答える