void FDeferredShadingSceneRenderer::Render(FRHICommandListImmediate& RHICmdList)
{
.....
RenderBasePass(RHICmdList);
}
这个函数是渲染staticmesh的。
然后调用到
Engine\Source\Runtime\Renderer\Private\StaticMeshDrawList.inl
文件中的
template<typename DrawingPolicyType>
template<InstancedStereoPolicy InstancedStereo>
bool TStaticMeshDrawList<DrawingPolicyType>::DrawVisibleInner(
FRHICommandList& RHICmdList,
const FViewInfo& View,
const typename DrawingPolicyType::ContextDataType PolicyContext,
const TBitArray<SceneRenderingBitArrayAllocator>* const StaticMeshVisibilityMap,
const TArray<uint64, SceneRenderingAllocator>* const BatchVisibilityArray,
const StereoPair* const StereoView,
int32 FirstPolicy, int32 LastPolicy,
bool bUpdateCounts
)
{
// We should have a single view's visibility data, or a stereo pair
check((StaticMeshVisibilityMap != nullptr && BatchVisibilityArray != nullptr) || StereoView != nullptr);
check((InstancedStereo == InstancedStereoPolicy::Enabled) == (StereoView != nullptr));
bool bDirty = false;
STAT(int32 StatInc = 0;)
for (int32 Index = FirstPolicy; Index <= LastPolicy; Index++)
{
FDrawingPolicyLink* DrawingPolicyLink = &DrawingPolicySet[OrderedDrawingPolicies[Index]];
bool bDrawnShared = false;
FPlatformMisc::Prefetch(DrawingPolicyLink->CompactElements.GetData());
const int32 NumElements = DrawingPolicyLink->Elements.Num();
FPlatformMisc::Prefetch(&DrawingPolicyLink->CompactElements.GetData()->MeshId);
const FElementCompact* CompactElementPtr = DrawingPolicyLink->CompactElements.GetData();
uint32 Count = 0;
for (int32 ElementIndex = 0; ElementIndex < NumElements; ElementIndex++, CompactElementPtr++)
{
// Single view
if (InstancedStereo == InstancedStereoPolicy::Disabled)
{
i