【问题标题】:Direct3D: Creating a render target view from a textureDirect3D:从纹理创建渲染目标视图
【发布时间】:2013-02-24 17:45:56
【问题描述】:

我想从纹理创建渲染目标视图,用于多目标渲染。我目前能够为后台缓冲区创建一个渲染目标视图——所有这些都很好。此外,我能够创建纹理。但是,当我尝试从中构建视图时,出现错误。

首先,代码如下:

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 *" 存在。

According to MSDN,ID3D11Texture2D 继承自 ID3D11Resource。我必须先以某种方式向上吗?

我正在使用 DirectX 11,并使用 vc110 进行编译。

【问题讨论】:

    标签: c++ direct3d render-to-texture


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-03
      • 2016-09-25
      • 1970-01-01
      相关资源
      最近更新 更多