aboutsummaryrefslogtreecommitdiff
path: root/NvCloth/samples/SampleBase/renderer/Renderer.cpp
diff options
context:
space:
mode:
authorMarijn Tamis <[email protected]>2018-05-03 18:22:48 +0200
committerMarijn Tamis <[email protected]>2018-05-03 18:22:48 +0200
commitca32c59a58d37c1822e185a2d5f3d0d3e8943593 (patch)
treeb06b9eec03f34344ef8fc31aa147b2714d3962ee /NvCloth/samples/SampleBase/renderer/Renderer.cpp
parentForced rename of platform folders in cmake dir. Git didn't pick this up before. (diff)
downloadnvcloth-ca32c59a58d37c1822e185a2d5f3d0d3e8943593.tar.xz
nvcloth-ca32c59a58d37c1822e185a2d5f3d0d3e8943593.zip
NvCloth 1.1.4 Release. (24070740)
Diffstat (limited to 'NvCloth/samples/SampleBase/renderer/Renderer.cpp')
-rw-r--r--NvCloth/samples/SampleBase/renderer/Renderer.cpp54
1 files changed, 50 insertions, 4 deletions
diff --git a/NvCloth/samples/SampleBase/renderer/Renderer.cpp b/NvCloth/samples/SampleBase/renderer/Renderer.cpp
index 48685d9..dffcebd 100644
--- a/NvCloth/samples/SampleBase/renderer/Renderer.cpp
+++ b/NvCloth/samples/SampleBase/renderer/Renderer.cpp
@@ -443,10 +443,55 @@ void Renderer::Render(ID3D11Device* /*device*/, ID3D11DeviceContext* ctx, ID3D11
ctx->RSSetViewports(1, &m_viewport);
// render debug render buffers
- while (m_queuedRenderBuffers.size() > 0)
{
- render(m_queuedRenderBuffers.back());
- m_queuedRenderBuffers.pop_back();
+ float fAspectRatio = m_screenWidth / m_screenHeight;
+
+ // Hack projection matrix to add a depth bias to all render buffers
+ // This might not be the behavior we want if we use the render buffers for other purposes than
+ // debug lines, but it works for now.
+ // Fill Camera constant buffer
+ {
+ float depthOffset = 0.005f;
+ // Temporarily change camera state so we can use the same projection matrix calculation.
+ // We don't want to mess with the DXUT library right now, but it would be cleaner to have support for this from m_camera
+ m_camera.SetProjParams(DirectX::XM_PIDIV4, fAspectRatio, CAMERA_CLIP_NEAR + depthOffset, CAMERA_CLIP_FAR + depthOffset);
+
+ // copied from the beginning of Renderer::Render()
+ // needed matrices
+ DirectX::XMMATRIX viewMatrix = m_camera.GetViewMatrix();
+ DirectX::XMMATRIX projMatrix = m_camera.GetProjMatrix();
+ DirectX::XMMATRIX projMatrixInv = DirectX::XMMatrixInverse(NULL, projMatrix);
+ DirectX::XMMATRIX viewProjMatrix = viewMatrix * projMatrix;
+
+ //same as // Opaque render
+ D3D11_MAPPED_SUBRESOURCE mappedResource;
+ ctx->Map(m_cameraCB, 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedResource);
+ CBCamera* cameraBuffer = (CBCamera*)mappedResource.pData;
+ cameraBuffer->viewProjection = viewProjMatrix;
+ cameraBuffer->projectionInv = projMatrixInv;
+ DirectX::XMStoreFloat3(&(cameraBuffer->viewPos), m_camera.GetEyePt());
+ ctx->Unmap(m_cameraCB, 0);
+ }
+
+ while(m_queuedRenderBuffers.size() > 0)
+ {
+ render(m_queuedRenderBuffers.back());
+ m_queuedRenderBuffers.pop_back();
+ }
+
+ //reset camera state
+ m_camera.SetProjParams(DirectX::XM_PIDIV4, fAspectRatio, CAMERA_CLIP_NEAR, CAMERA_CLIP_FAR);
+
+ // Fill Camera constant buffer (make sure that the depth bias is reset)
+ {
+ D3D11_MAPPED_SUBRESOURCE mappedResource;
+ ctx->Map(m_cameraCB, 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedResource);
+ CBCamera* cameraBuffer = (CBCamera*)mappedResource.pData;
+ cameraBuffer->viewProjection = viewProjMatrix;
+ cameraBuffer->projectionInv = projMatrixInv;
+ DirectX::XMStoreFloat3(&(cameraBuffer->viewPos), m_camera.GetEyePt());
+ ctx->Unmap(m_cameraCB, 0);
+ }
}
// Transparency render
@@ -680,7 +725,8 @@ void Renderer::reloadShaders()
std::set<RenderMaterial*> materials;
for (auto it = m_renderables.begin(); it != m_renderables.end(); it++)
{
- materials.emplace(&((*it)->getMaterial()));
+ for(int i = 0; i<(*it)->getMaterialCount(); i++)
+ materials.emplace(&((*it)->getMaterial(i)));
}
for (std::set<RenderMaterial*>::iterator it = materials.begin(); it != materials.end(); it++)
{