Add additional StaticFlagsCompare to Render View for dynamic or static only drawing
This commit is contained in:
@@ -127,6 +127,11 @@ public:
|
||||
/// </summary>
|
||||
API_FIELD() StaticFlags StaticFlagsMask = StaticFlags::None;
|
||||
|
||||
/// <summary>
|
||||
/// The static flags mask comparision rhs. Allows to draw objects that don't pass the static flags mask. Objects are checked with the following formula: (ObjectStaticFlags and StaticFlagsMask) == StaticFlagsMaskCompare.
|
||||
/// </summary>
|
||||
API_FIELD() StaticFlags StaticFlagsCompare = StaticFlags::None;
|
||||
|
||||
/// <summary>
|
||||
/// The view flags.
|
||||
/// </summary>
|
||||
|
||||
@@ -212,12 +212,12 @@ void SceneRendering::DrawActorsJob(int32)
|
||||
PROFILE_CPU();
|
||||
auto& mainContext = _drawBatch->GetMainContext();
|
||||
const auto& view = mainContext.View;
|
||||
if (view.IsOfflinePass)
|
||||
if (view.StaticFlagsMask != StaticFlags::None)
|
||||
{
|
||||
// Offline pass with additional static flags culling
|
||||
// Static-flags culling
|
||||
FOR_EACH_BATCH_ACTOR
|
||||
e.Bounds.Center -= view.Origin;
|
||||
if (CHECK_ACTOR && (e.Actor->GetStaticFlags() & view.StaticFlagsMask) != StaticFlags::None)
|
||||
if (CHECK_ACTOR && (e.Actor->GetStaticFlags() & view.StaticFlagsMask) == view.StaticFlagsCompare)
|
||||
{
|
||||
DRAW_ACTOR(*_drawBatch);
|
||||
}
|
||||
|
||||
@@ -273,7 +273,7 @@ bool ProbesRenderer::Init()
|
||||
view.Mode = ViewMode::NoPostFx;
|
||||
view.IsOfflinePass = true;
|
||||
view.IsSingleFrame = true;
|
||||
view.StaticFlagsMask = StaticFlags::ReflectionProbe;
|
||||
view.StaticFlagsMask = view.StaticFlagsCompare = StaticFlags::ReflectionProbe;
|
||||
view.MaxShadowsQuality = Quality::Low;
|
||||
task->IsCameraCut = true;
|
||||
task->Resize(probeResolution, probeResolution);
|
||||
|
||||
@@ -569,7 +569,9 @@ void RenderList::AddDrawCall(const RenderContextBatch& renderContextBatch, DrawP
|
||||
const RenderContext& renderContext = renderContextBatch.Contexts.Get()[i];
|
||||
ASSERT_LOW_LAYER(renderContext.View.Pass == DrawPass::Depth);
|
||||
drawModes = modes & renderContext.View.Pass;
|
||||
if (drawModes != DrawPass::None && renderContext.View.CullingFrustum.Intersects(bounds))
|
||||
if (drawModes != DrawPass::None &&
|
||||
(staticFlags & renderContext.View.StaticFlagsMask) == renderContext.View.StaticFlagsCompare &&
|
||||
renderContext.View.CullingFrustum.Intersects(bounds))
|
||||
{
|
||||
renderContext.List->ShadowDepthDrawCallsList.Indices.Add(index);
|
||||
}
|
||||
|
||||
@@ -457,7 +457,7 @@ bool ShadowsOfMordor::Builder::initResources()
|
||||
view.IsOfflinePass = true;
|
||||
view.Near = HEMISPHERES_NEAR_PLANE;
|
||||
view.Far = HEMISPHERES_FAR_PLANE;
|
||||
view.StaticFlagsMask = StaticFlags::Lightmap;
|
||||
view.StaticFlagsMask = view.StaticFlagsCompare = StaticFlags::Lightmap;
|
||||
view.MaxShadowsQuality = Quality::Low;
|
||||
_task->Resize(HEMISPHERES_RESOLUTION, HEMISPHERES_RESOLUTION);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user