Optimize decals rendering
This commit is contained in:
@@ -130,17 +130,14 @@ void MaterialComplexityMaterialShader::Draw(RenderContext& renderContext, GPUCon
|
||||
MaterialBase::BindParameters bindParams(context, renderContext, drawCall);
|
||||
bindParams.BindViewData();
|
||||
drawCall.WorldDeterminantSign = 1.0f;
|
||||
drawCall.PerInstanceRandom = 0.0f;
|
||||
context->SetRenderTarget(lightBuffer);
|
||||
for (int32 i = 0; i < decals.Count(); i++)
|
||||
{
|
||||
const auto decal = decals[i];
|
||||
ASSERT(decal && decal->Material);
|
||||
Transform transform = decal->GetTransform();
|
||||
transform.Scale *= decal->GetSize();
|
||||
renderContext.View.GetWorldMatrix(transform, drawCall.World);
|
||||
const RenderDecalData& decal = decals.Get()[i];
|
||||
drawCall.World = decal.World;
|
||||
drawCall.ObjectPosition = drawCall.World.GetTranslation();
|
||||
drawCall.Material = decal->Material;
|
||||
drawCall.PerInstanceRandom = decal->GetPerInstanceRandom();
|
||||
drawCall.Material = decal.Material;
|
||||
decalsWrapper.Bind(bindParams);
|
||||
boxModel->Render(context);
|
||||
}
|
||||
|
||||
@@ -49,7 +49,8 @@ void QuadOverdrawPass::Render(RenderContext& renderContext, GPUContext* context,
|
||||
context->BindUA(1, overdrawTexture->View());
|
||||
context->BindUA(2, liveCountTexture->View());
|
||||
DrawCall drawCall;
|
||||
drawCall.PerInstanceRandom = 1.0f;
|
||||
drawCall.WorldDeterminantSign = 1.0f;
|
||||
drawCall.PerInstanceRandom = 0.0f;
|
||||
MaterialBase::BindParameters bindParams(context, renderContext, drawCall);
|
||||
bindParams.BindViewData();
|
||||
renderContext.View.Pass = DrawPass::QuadOverdraw;
|
||||
@@ -62,13 +63,8 @@ void QuadOverdrawPass::Render(RenderContext& renderContext, GPUContext* context,
|
||||
// Draw decals
|
||||
for (int32 i = 0; i < renderContext.List->Decals.Count(); i++)
|
||||
{
|
||||
const auto decal = renderContext.List->Decals[i];
|
||||
ASSERT(decal && decal->Material);
|
||||
Transform transform = decal->GetTransform();
|
||||
transform.Scale *= decal->GetSize();
|
||||
renderContext.View.GetWorldMatrix(transform, drawCall.World);
|
||||
drawCall.ObjectPosition = drawCall.World.GetTranslation();
|
||||
drawCall.PerInstanceRandom = decal->GetPerInstanceRandom();
|
||||
const RenderDecalData& decal = renderContext.List->Decals.Get()[i];
|
||||
drawCall.World = decal.World;
|
||||
defaultMaterial->Bind(bindParams);
|
||||
boxModel->Render(context);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user