Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Direct3D:从纹理创建渲染目标视图_C++_Direct3d_Render To Texture - Fatal编程技术网

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

C++ Direct3D:从纹理创建渲染目标视图,c++,direct3d,render-to-texture,C++,Direct3d,Render To Texture,我想从纹理创建渲染目标视图,用于多目标渲染。我目前能够为后缓冲区创建一个渲染目标视图——所有这些都很好地工作。此外,我能够创建纹理。然而,当我试图从中构建视图时,我得到了一个错误 首先,代码如下: D3D11_TEXTURE2D_DESC textureDesc; ZeroMemory(&textureDesc, sizeof(textureDesc)); textureDesc.ArraySize = 1; textureDesc.BindFlags = D3D11_BIND_REN

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

首先,代码如下:

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]
        )
    );
D3D11_TEXTURE2D_DESC textureDesc;
零内存(&textureDesc,sizeof(textureDesc));
textureDesc.ArraySize=1;
textureDesc.BindFlags=D3D11_BIND_RENDER_TARGET | D3D11_BIND_SHADER_RESOURCE;
textureDesc.CPUAccessFlags=0;
textureDesc.Format=DXGI\u Format\u R32\u FLOAT;
textureDesc.Height=m_renderTargetSize.Height;
textureDesc.Width=m_renderTargetSize.Width;
textureDesc.MipLevels=1;
textureDesc.miscsflags=0;
textureDesc.SampleDesc.Count=1;
textureDesc.SampleDesc.Quality=0;
textureDesc.Usage=D3D11\u Usage\u默认值;
ComPtr结构;
DX::ThrowIfFailed(
m_d3dDevice->CreateTexture2D(
&结构主义者,
nullptr,
&质地
)
);
D3D11_RENDER_TARGET_VIEW_DESC renderTargetViewDescription;
ZeroMemory(&renderTargetViewDescription,sizeof(renderTargetViewDescription));
renderTargetViewDescription.Format=textureDesc.Format;
DX::ThrowIfFailed(
m_d3dDevice->CreateRenderTargetView(
纹理
&renderTargetViewDescription,
&m_renderTargetView[1]
)
);
我在调用
CreateRenderTargetView
的线路上从编译器处收到以下错误:

错误:中没有合适的转换函数 “Microsoft::WRL::ComPtr”到“ID3D11Resource*” 存在

,ID3D11Texture2D继承自ID3D11Resource。我必须先向上倾斜吗


我在DirectX 11中工作,并使用vc110进行编译

似乎WRL的ComPtr不支持隐式转换为t*(与ATL的CComPtr不同),因此需要使用Get方法:

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