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); }