Example #1
0
void SDFShadowDemo::DrawScene()
{
    m_pRender->pImmPipeline->ClearBuffers(Colors::LightSteelBlue);

    //for (auto i = 0; i < m_vGeoms.size(); ++i)
    //{
    //	auto pData = m_pRender->pImmPipeline->MapResource(m_constantBuffer, 0, D3D11_MAP_WRITE_DISCARD, 0);
    //	auto pBuffer = (CBufferType*)pData.pData;
    //	pBuffer->mat = m_vMats[i] * m_worldMat * m_viewMat * m_projMat;
    //	m_pRender->pImmPipeline->UnMapResource(m_constantBuffer, 0);
    //	m_pRender->pImmPipeline->ApplyPipelineResources();

    //	m_vGeoms[i]->Execute(m_pRender->pImmPipeline);
    //}

    ShaderStageStateDX11 vsState;
    vsState.ShaderProgram.SetState(m_vsID);
    m_pRender->pImmPipeline->VertexShaderStage.DesiredState = vsState;

    auto pData = m_pRender->pImmPipeline->MapResource(m_constantBuffer, 0, D3D11_MAP_WRITE_DISCARD, 0);
    auto pBuffer = (CBufferType*)pData.pData;
    pBuffer->matWorld = m_worldMat;
    pBuffer->matViewProj = m_viewMat * m_projMat;
    pBuffer->matViewProjInverse = (m_viewMat * m_projMat).Inverse();
    pBuffer->screenParams = Vector4f(static_cast<f32>(mClientWidth), static_cast<f32>(mClientHeight), 0.0f, 0.0f);
    pBuffer->SDFParams = m_sdfParams;
    pBuffer->SDFOrigin = m_sdfOrigin;
    pBuffer->cameraPos = m_cameraPos;
    m_pRender->pImmPipeline->UnMapResource(m_constantBuffer, 0);

    auto resource = m_pRender->GetResourceByIndex(m_constantBuffer->m_iResource);

    ShaderStageStateDX11 psState;
    psState.ShaderProgram.SetState(m_psID);
    psState.SamplerStates.SetState(0, m_pRender->GetSamplerState(m_samplerID).Get());
    psState.ShaderResourceViews.SetState(0, m_pRender->GetShaderResourceViewByIndex(m_SDFTex3D->m_iResourceSRV).GetSRV());
    psState.ConstantBuffers.SetState(0, (ID3D11Buffer*)resource->GetResource());
    m_pRender->pImmPipeline->PixelShaderStage.DesiredState = psState;

    m_pRender->pImmPipeline->ApplyPipelineResources();
    m_pQuad->Execute(m_pRender->pImmPipeline);

    m_pRender->Present(MainWnd(), 0);
}