Direct3D: создание целевого вида рендеринга из текстуры

Я хотел бы создать целевой объект рендеринга из текстуры, для использования в многоцелевом рендеринге. В настоящее время я могу создать представление цели рендеринга для заднего буфера — все это прекрасно работает. Далее я могу создать текстуру. Однако, когда я пытаюсь построить представление из этого, я получаю ошибку.

Во-первых, вот код:

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.

1

Решение

Кажется, что WRL ComPtr не поддерживает неявное преобразование в T * (в отличие от ATL CComPtr), поэтому вам нужно использовать метод Get:

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]