void PostProcessor::Render(ID3D11DeviceContext* deviceContext, ID3D11ShaderResourceView* input,
                           ID3D11ShaderResourceView* depthBuffer, const Camera& camera,
                           ID3D11RenderTargetView* output, float deltaSeconds)
{
    PostProcessorBase::Render(deviceContext, input, output);

    TempRenderTarget* bloom = Bloom(input);

    // Apply tone mapping
    ToneMap(input, bloom->SRView, output);

    bloom->InUse = false;

    // Check for leaked temp render targets
    for(uint64 i = 0; i < tempRenderTargets.size(); ++i)
        Assert_(tempRenderTargets[i]->InUse == false);
}
//Draw our post process effects using ping pong
void Renderer::DrawPostProcess(){
	glDisable(GL_DEPTH_TEST);
	SetupPPMatrices();
	glBindFramebuffer(GL_FRAMEBUFFER, processFBO);

	if (sobel) Sobel();
	if (sobelDepth) SobelDepth();
	if (quantizeCol) QuantizeCol();
	if (fog) Fog();
	if (bloom) Bloom();
	if (dubVis) DoubleVision();
	if (blur) Blur();

	glBindFramebuffer(GL_FRAMEBUFFER, 0);
	glUseProgram(0);

	glEnable(GL_DEPTH_TEST);
}
void PostProcessor::Render(ID3D11DeviceContext* deviceContext, ID3D11ShaderResourceView* input,
                            ID3D11RenderTargetView* output)
{
    PostProcessorBase::Render(deviceContext, input, output);

    constantBuffer.ApplyChanges(deviceContext);
    constantBuffer.SetPS(deviceContext, 1);

    // Calculate the average luminance first
    CalcAvgLuminance(input);

    // Now do the bloom
    TempRenderTarget* bloom = NULL;
    Bloom(input, bloom);

    // Apply tone mapping
    ToneMap(input, bloom->SRView, output);

    bloom->InUse = false;

    currLumTarget = !currLumTarget;
}