Merge branch 'master' into automatic-file-fix
This commit is contained in:
@@ -61,21 +61,21 @@ namespace Nz
|
||||
{
|
||||
if (newMaterial)
|
||||
{
|
||||
if (MaterialPass* pass = newMaterial->GetPass(m_depthPassIndex))
|
||||
RegisterMaterialPass(pass);
|
||||
if (const auto& pass = newMaterial->GetPass(m_depthPassIndex))
|
||||
RegisterMaterialPass(pass.get());
|
||||
|
||||
if (MaterialPass* pass = newMaterial->GetPass(m_forwardPassIndex))
|
||||
RegisterMaterialPass(pass);
|
||||
if (const auto& pass = newMaterial->GetPass(m_forwardPassIndex))
|
||||
RegisterMaterialPass(pass.get());
|
||||
}
|
||||
|
||||
const auto& prevMaterial = instancedRenderable->GetMaterial(materialIndex);
|
||||
if (prevMaterial)
|
||||
{
|
||||
if (MaterialPass* pass = prevMaterial->GetPass(m_depthPassIndex))
|
||||
UnregisterMaterialPass(pass);
|
||||
if (const auto& pass = prevMaterial->GetPass(m_depthPassIndex))
|
||||
UnregisterMaterialPass(pass.get());
|
||||
|
||||
if (MaterialPass* pass = prevMaterial->GetPass(m_forwardPassIndex))
|
||||
UnregisterMaterialPass(pass);
|
||||
if (const auto& pass = prevMaterial->GetPass(m_forwardPassIndex))
|
||||
UnregisterMaterialPass(pass.get());
|
||||
}
|
||||
|
||||
for (auto&& [viewer, viewerData] : m_viewers)
|
||||
@@ -90,11 +90,11 @@ namespace Nz
|
||||
{
|
||||
if (Material* mat = instancedRenderable->GetMaterial(i).get())
|
||||
{
|
||||
if (MaterialPass* pass = mat->GetPass(m_depthPassIndex))
|
||||
RegisterMaterialPass(pass);
|
||||
if (const auto& pass = mat->GetPass(m_depthPassIndex))
|
||||
RegisterMaterialPass(pass.get());
|
||||
|
||||
if (MaterialPass* pass = mat->GetPass(m_forwardPassIndex))
|
||||
RegisterMaterialPass(pass);
|
||||
if (const auto& pass = mat->GetPass(m_forwardPassIndex))
|
||||
RegisterMaterialPass(pass.get());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -157,7 +157,7 @@ namespace Nz
|
||||
{
|
||||
viewerData.rebuildDepthPrepass = true;
|
||||
viewerData.rebuildForwardPass = true;
|
||||
prepare = true;
|
||||
viewerData.prepare = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -215,7 +215,7 @@ namespace Nz
|
||||
{
|
||||
viewerData.rebuildDepthPrepass = true;
|
||||
viewerData.rebuildForwardPass = true;
|
||||
prepare = true;
|
||||
viewerData.prepare = true;
|
||||
|
||||
viewerData.visibilityHash = visibilityHash;
|
||||
}
|
||||
@@ -264,46 +264,42 @@ namespace Nz
|
||||
});
|
||||
}
|
||||
|
||||
if (prepare)
|
||||
for (auto&& [viewer, viewerData] : m_viewers)
|
||||
{
|
||||
if (!viewerData.prepare)
|
||||
continue;
|
||||
|
||||
for (std::size_t i = 0; i < m_elementRenderers.size(); ++i)
|
||||
{
|
||||
auto& elementRendererPtr = m_elementRenderers[i];
|
||||
|
||||
for (auto&& [_, viewerData] : m_viewers)
|
||||
if (i >= viewerData.elementRendererData.size() || !viewerData.elementRendererData[i])
|
||||
{
|
||||
if (i >= viewerData.elementRendererData.size() || !viewerData.elementRendererData[i])
|
||||
{
|
||||
if (i >= viewerData.elementRendererData.size())
|
||||
viewerData.elementRendererData.resize(i + 1);
|
||||
if (i >= viewerData.elementRendererData.size())
|
||||
viewerData.elementRendererData.resize(i + 1);
|
||||
|
||||
viewerData.elementRendererData[i] = elementRendererPtr->InstanciateData();
|
||||
}
|
||||
|
||||
if (elementRendererPtr)
|
||||
elementRendererPtr->Reset(*viewerData.elementRendererData[i], renderFrame);
|
||||
viewerData.elementRendererData[i] = elementRendererPtr->InstanciateData();
|
||||
}
|
||||
|
||||
if (elementRendererPtr)
|
||||
elementRendererPtr->Reset(*viewerData.elementRendererData[i], renderFrame);
|
||||
}
|
||||
|
||||
for (auto&& [_, viewerData] : m_viewers)
|
||||
auto& rendererData = viewerData.elementRendererData;
|
||||
|
||||
const auto& viewerInstance = viewer->GetViewerInstance();
|
||||
|
||||
ProcessRenderQueue(viewerData.depthPrepassRenderQueue, [&](std::size_t elementType, const Pointer<const RenderElement>* elements, std::size_t elementCount)
|
||||
{
|
||||
auto& rendererData = viewerData.elementRendererData;
|
||||
ElementRenderer& elementRenderer = *m_elementRenderers[elementType];
|
||||
elementRenderer.Prepare(viewerInstance, *rendererData[elementType], renderFrame, elements, elementCount);
|
||||
});
|
||||
|
||||
ProcessRenderQueue(viewerData.depthPrepassRenderQueue, [&](std::size_t elementType, const Pointer<const RenderElement>* elements, std::size_t elementCount)
|
||||
{
|
||||
ElementRenderer& elementRenderer = *m_elementRenderers[elementType];
|
||||
elementRenderer.Prepare(*rendererData[elementType], renderFrame, elements, elementCount);
|
||||
});
|
||||
|
||||
ProcessRenderQueue(viewerData.forwardRenderQueue, [&](std::size_t elementType, const Pointer<const RenderElement>* elements, std::size_t elementCount)
|
||||
{
|
||||
ElementRenderer& elementRenderer = *m_elementRenderers[elementType];
|
||||
elementRenderer.Prepare(*rendererData[elementType], renderFrame, elements, elementCount);
|
||||
});
|
||||
|
||||
viewerData.rebuildForwardPass = true;
|
||||
viewerData.rebuildDepthPrepass = true;
|
||||
}
|
||||
ProcessRenderQueue(viewerData.forwardRenderQueue, [&](std::size_t elementType, const Pointer<const RenderElement>* elements, std::size_t elementCount)
|
||||
{
|
||||
ElementRenderer& elementRenderer = *m_elementRenderers[elementType];
|
||||
elementRenderer.Prepare(viewerInstance, *rendererData[elementType], renderFrame, elements, elementCount);
|
||||
});
|
||||
}
|
||||
|
||||
if (m_bakedFrameGraph.Resize(renderFrame))
|
||||
@@ -335,6 +331,7 @@ namespace Nz
|
||||
{
|
||||
viewerData.rebuildForwardPass = false;
|
||||
viewerData.rebuildDepthPrepass = false;
|
||||
viewerData.prepare = false;
|
||||
|
||||
const RenderTarget& renderTarget = viewer->GetRenderTarget();
|
||||
Recti renderRegion(0, 0, frameSize.x, frameSize.y);
|
||||
@@ -388,17 +385,17 @@ namespace Nz
|
||||
else
|
||||
{
|
||||
m_removedWorldInstances.insert(worldInstance);
|
||||
m_renderables.erase(instanceIt);;
|
||||
m_renderables.erase(instanceIt);
|
||||
}
|
||||
|
||||
std::size_t matCount = instancedRenderable->GetMaterialCount();
|
||||
for (std::size_t i = 0; i < matCount; ++i)
|
||||
{
|
||||
if (MaterialPass* pass = instancedRenderable->GetMaterial(i)->GetPass(m_depthPassIndex))
|
||||
UnregisterMaterialPass(pass);
|
||||
if (const auto& pass = instancedRenderable->GetMaterial(i)->GetPass(m_depthPassIndex))
|
||||
UnregisterMaterialPass(pass.get());
|
||||
|
||||
if (MaterialPass* pass = instancedRenderable->GetMaterial(i)->GetPass(m_forwardPassIndex))
|
||||
UnregisterMaterialPass(pass);
|
||||
if (const auto& pass = instancedRenderable->GetMaterial(i)->GetPass(m_forwardPassIndex))
|
||||
UnregisterMaterialPass(pass.get());
|
||||
}
|
||||
|
||||
for (auto&& [viewer, viewerData] : m_viewers)
|
||||
@@ -454,12 +451,12 @@ namespace Nz
|
||||
builder.SetScissor(viewport);
|
||||
builder.SetViewport(viewport);
|
||||
|
||||
builder.BindShaderBinding(Graphics::ViewerBindingSet, viewer->GetViewerInstance().GetShaderBinding());
|
||||
const auto& viewerInstance = viewer->GetViewerInstance();
|
||||
|
||||
ProcessRenderQueue(viewerData.depthPrepassRenderQueue, [&](std::size_t elementType, const Pointer<const RenderElement>* elements, std::size_t elementCount)
|
||||
{
|
||||
ElementRenderer& elementRenderer = *m_elementRenderers[elementType];
|
||||
elementRenderer.Render(*viewerData.elementRendererData[elementType], builder, elements, elementCount);
|
||||
elementRenderer.Render(viewerInstance, *viewerData.elementRendererData[elementType], builder, elements, elementCount);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -486,12 +483,12 @@ namespace Nz
|
||||
builder.SetScissor(viewport);
|
||||
builder.SetViewport(viewport);
|
||||
|
||||
builder.BindShaderBinding(Graphics::ViewerBindingSet, viewer->GetViewerInstance().GetShaderBinding());
|
||||
|
||||
const auto& viewerInstance = viewer->GetViewerInstance();
|
||||
|
||||
ProcessRenderQueue(viewerData.forwardRenderQueue, [&](std::size_t elementType, const Pointer<const RenderElement>* elements, std::size_t elementCount)
|
||||
{
|
||||
ElementRenderer& elementRenderer = *m_elementRenderers[elementType];
|
||||
elementRenderer.Render(*viewerData.elementRendererData[elementType], builder, elements, elementCount);
|
||||
elementRenderer.Render(viewerInstance , *viewerData.elementRendererData[elementType], builder, elements, elementCount);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user