diff --git a/Source/Engine/Renderer/RenderList.cpp b/Source/Engine/Renderer/RenderList.cpp index 4a2867d3b..9737ae509 100644 --- a/Source/Engine/Renderer/RenderList.cpp +++ b/Source/Engine/Renderer/RenderList.cpp @@ -38,6 +38,13 @@ namespace static ExtensionsList list; return list; } + + FORCE_INLINE bool IsSimpleMaterial(const MaterialInfo& info) + { + return EnumHasNoneFlags(info.UsageFlags, MaterialUsageFlags::UseMask | MaterialUsageFlags::UsePositionOffset | MaterialUsageFlags::UseDisplacement) && + EnumHasNoneFlags(info.FeaturesFlags, MaterialFeaturesFlags::Wireframe) && + info.BlendMode == MaterialBlendMode::Opaque; + } } void ShaderObjectData::Store(const Matrix& worldMatrix, const Matrix& prevWorldMatrix, const Rectangle& lightmapUVsArea, const Float3& geometrySize, float perInstanceRandom, float worldDeterminantSign, float lodDitherFactor) @@ -1177,13 +1184,7 @@ bool SurfaceDrawCallHandler::CanBatch(const DrawCall& a, const DrawCall& b, Draw // Batch simple materials during depth-only drawing (when using default vertex shader and no pixel shader) if (pass == DrawPass::Depth) { - // TODO: cache those inside material - const MaterialInfo& aInfo = a.Material->GetInfo(); - const MaterialInfo& bInfo = b.Material->GetInfo(); - constexpr MaterialUsageFlags complexUsageFlags = MaterialUsageFlags::UseMask | MaterialUsageFlags::UsePositionOffset | MaterialUsageFlags::UseDisplacement; - const bool aIsSimple = EnumHasNoneFlags(aInfo.UsageFlags, complexUsageFlags) && aInfo.BlendMode == MaterialBlendMode::Opaque && EnumHasNoneFlags(aInfo.FeaturesFlags, MaterialFeaturesFlags::Wireframe); - const bool bIsSimple = EnumHasNoneFlags(bInfo.UsageFlags, complexUsageFlags) && bInfo.BlendMode == MaterialBlendMode::Opaque && EnumHasNoneFlags(bInfo.FeaturesFlags, MaterialFeaturesFlags::Wireframe); - return aIsSimple && bIsSimple; + return IsSimpleMaterial(a.Material->GetInfo()) && IsSimpleMaterial(b.Material->GetInfo()); } return false; }