I followed D3D Post Processing sample in windows 8.1.
And I have successfully rendered my object with post processing effect.
But now I met a problem.I have many objects to render.I want only a part of objects rendered with post processing effect.I know this problem is about rendertarget.But I don't know how to deal with it.
Following is my code:
void D3DPostProcessing::DrawWithoutPostProcessing()
{
m_d3dContext->OMSetRenderTargets(1, m_d3dRenderTargetView.GetAddressOf(), m_d3dDepthStencilView.Get());
const float clearColor[4] = { 0.071f, 0.040f, 0.561f, 1.0f };
m_d3dContext->ClearRenderTargetView(m_d3dRenderTargetView.Get(), clearColor);
m_d3dContext->ClearDepthStencilView(m_d3dDepthStencilView.Get(), D3D11_CLEAR_DEPTH, 1.0f, 0);
m_d3dContext->IASetInputLayout(m_inputLayout.Get());
unsigned int stride = sizeof(VertexPNTTBI);
unsigned int offset = 0;
m_d3dContext->IASetVertexBuffers(0, 1, mYHMMesh.Geometry[0].VertexBuffer.GetAddressOf(), &stride, &offset);
m_d3dContext->IASetIndexBuffer(mYHMMesh.Geometry[0].IndexBuffer.Get(), DXGI_FORMAT_R16_UINT, 0);
m_d3dContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
m_d3dContext->VSSetShader(m_vertexShader.Get(), nullptr, 0);
m_d3dContext->VSSetConstantBuffers(0, 1, m_constantBuffer.GetAddressOf());
// set the pixel shader stage state
m_d3dContext->PSSetShader(m_pixelShader.Get(), nullptr, 0);
m_d3dContext->PSSetShaderResources(0, 1, mYHMMesh.Geometry[0].textureSVR.GetAddressOf());
m_d3dContext->PSSetSamplers(0, 1, m_sampler.GetAddressOf());
m_d3dContext->DrawIndexed(mYHMMesh.Geometry[0].IndexCount, 0, 0);
}
void D3DPostProcessing::DrawPostProcessing()
{
m_d3dContext->OMSetRenderTargets(1, m_intermediateTextureRenderTargetView.GetAddressOf(), m_d3dDepthStencilView.Get());
const float clearColor[4] = { 0.071f, 0.040f, 0.561f, 1.0f };
m_d3dContext->ClearRenderTargetView(m_intermediateTextureRenderTargetView.Get(), clearColor);
m_d3dContext->ClearDepthStencilView(m_d3dDepthStencilView.Get(), D3D11_CLEAR_DEPTH, 1.0f, 0);
m_d3dContext->IASetInputLayout(m_inputLayout.Get());
unsigned int stride = sizeof(VertexPNTTBI);
unsigned int offset = 0;
m_d3dContext->IASetVertexBuffers(0, 1, mYHMMesh.Geometry[0].VertexBuffer.GetAddressOf(), &stride, &offset);
m_d3dContext->IASetIndexBuffer(mYHMMesh.Geometry[0].IndexBuffer.Get(), DXGI_FORMAT_R16_UINT, 0);
m_d3dContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
m_d3dContext->VSSetShader(m_vertexShader.Get(), nullptr, 0);
m_d3dContext->VSSetConstantBuffers(0, 1, m_constantBuffer.GetAddressOf());
// set the pixel shader stage state
m_d3dContext->PSSetShader(m_pixelShader.Get(), nullptr, 0);
m_d3dContext->PSSetShaderResources(0, 1, mYHMMesh.Geometry[0].textureSVR.GetAddressOf());
m_d3dContext->PSSetSamplers(0, 1, m_sampler.GetAddressOf());
// Save the backbuffer viewport
D3D11_VIEWPORT oldViewPort[1];
unsigned int numberOfViewPorts = 1;
m_d3dContext->RSGetViewports(&numberOfViewPorts, oldViewPort);
// Setup the viewport to match the Intermediate Render Target
D3D11_VIEWPORT viewPort = { 0 };
viewPort.Width = static_cast<float>(m_intermediateRenderTargetWidth);
viewPort.Height = static_cast<float>(m_intermediateRenderTargetHeight);
viewPort.MinDepth = 0.0f;
viewPort.MaxDepth = 1.0f;
viewPort.TopLeftX = 0;
viewPort.TopLeftY = 0;
m_d3dContext->RSSetViewports(1, &viewPort);
m_d3dContext->DrawIndexed(mYHMMesh.Geometry[0].IndexCount, 0, 0);
// Restore the backbuffer viewport
m_d3dContext->RSSetViewports(numberOfViewPorts, oldViewPort);
BrightPassDownFilter();
RenderGlow();
CombineGlow();
}
In my code, both object rendered with post processing effect.Before rendering a post processing effect, I want to render one object that without post processing effect.
Any help would be appreciated.Thanks.
And this is my full code[attachment=20537:FullCode.rar]