From 0caac1a28c9b36dd8f0bdc9b898b23f33b877acb Mon Sep 17 00:00:00 2001 From: Azaezel Date: Thu, 7 Feb 2019 09:34:23 -0600 Subject: [PATCH] cut down on some of that per-frame allocation via prepping our vector 'registers' during the constructor --- .../source/renderInstance/renderProbeMgr.cpp | 72 ++++++++----------- Engine/source/renderInstance/renderProbeMgr.h | 17 +++++ 2 files changed, 48 insertions(+), 41 deletions(-) diff --git a/Engine/source/renderInstance/renderProbeMgr.cpp b/Engine/source/renderInstance/renderProbeMgr.cpp index 8526ebdce..097db9602 100644 --- a/Engine/source/renderInstance/renderProbeMgr.cpp +++ b/Engine/source/renderInstance/renderProbeMgr.cpp @@ -246,6 +246,36 @@ RenderProbeMgr::RenderProbeMgr() { String brdfPath = Con::getVariable("$Core::BRDFTexture", "core/art/pbr/brdfTexture.dds"); mBrdfTexture = TEXMGR->createTexture(brdfPath, &GFXTexturePersistentProfile); + + probePositions.setSize(MAXPROBECOUNT); + probePositions.fill(Point3F::Zero); + + probeWorldToObj.setSize(MAXPROBECOUNT); + probeWorldToObj.fill(MatrixF::Identity); + + probeBBMin.setSize(MAXPROBECOUNT); + probeBBMin.fill(Point3F::Zero); + + probeBBMax.setSize(MAXPROBECOUNT); + probeBBMax.fill(Point3F::Zero); + + probeUseSphereMode.setSize(MAXPROBECOUNT); + probeUseSphereMode.fill(0.0f); + + probeRadius.setSize(MAXPROBECOUNT); + probeRadius.fill(0.0f); + + probeAttenuation.setSize(MAXPROBECOUNT); + probeAttenuation.fill(0.0f); + + cubeMaps.setSize(MAXPROBECOUNT); + cubeMaps.fill(NULL); + + irradMaps.setSize(MAXPROBECOUNT); + irradMaps.fill(NULL); + + GFXCubemapArrayHandle mCubemapArray; + GFXCubemapArrayHandle mIrradArray; } RenderProbeMgr::RenderProbeMgr(RenderInstType riType, F32 renderOrder, F32 processAddOrder) @@ -662,44 +692,7 @@ void RenderProbeMgr::render( SceneRenderState *state ) return; MatrixF trans = MatrixF::Identity; sgData.objTrans = &trans; - - Vector probePositions; - Vector probeWorldToObj; - Vector probeBBMin; - Vector probeBBMax; - Vector probeUseSphereMode; - Vector probeRadius; - Vector probeAttenuation; - Vector cubeMaps; - Vector irradMaps; - - probePositions.setSize(MAXPROBECOUNT); - probePositions.fill(Point3F::Zero); - - probeWorldToObj.setSize(MAXPROBECOUNT); - probeWorldToObj.fill(MatrixF::Identity); - - probeBBMin.setSize(MAXPROBECOUNT); - probeBBMin.fill(Point3F::Zero); - - probeBBMax.setSize(MAXPROBECOUNT); - probeBBMax.fill(Point3F::Zero); - - probeUseSphereMode.setSize(MAXPROBECOUNT); - probeUseSphereMode.fill(0.0f); - - probeRadius.setSize(MAXPROBECOUNT); - probeRadius.fill(0.0f); - - probeAttenuation.setSize(MAXPROBECOUNT); - probeAttenuation.fill(0.0f); - - cubeMaps.setSize(MAXPROBECOUNT); - cubeMaps.fill(NULL); - - irradMaps.setSize(MAXPROBECOUNT); - irradMaps.fill(NULL); - + U32 effectiveProbeCount = 0; for (U32 i = 0; i < probeCount; i++) @@ -748,10 +741,7 @@ void RenderProbeMgr::render( SceneRenderState *state ) U32 count = effectiveProbeCount; matParams->setSafe(numProbesSC, (float)effectiveProbeCount); - GFXCubemapArrayHandle mCubemapArray; mCubemapArray = GFXCubemapArrayHandle(GFX->createCubemapArray()); - - GFXCubemapArrayHandle mIrradArray; mIrradArray = GFXCubemapArrayHandle(GFX->createCubemapArray()); mCubemapArray->initStatic(cubeMaps.address(), count); diff --git a/Engine/source/renderInstance/renderProbeMgr.h b/Engine/source/renderInstance/renderProbeMgr.h index 9a20ed84f..3ad62d942 100644 --- a/Engine/source/renderInstance/renderProbeMgr.h +++ b/Engine/source/renderInstance/renderProbeMgr.h @@ -48,6 +48,8 @@ #include "postFx/postEffectCommon.h" #endif +static U32 MAXPROBECOUNT = 50; + struct ProbeRenderInst : public SystemInterface { LinearColorF mAmbient; @@ -282,6 +284,21 @@ protected: GFXShaderConstBuffer *shaderConsts); GFXTextureObject * mBrdfTexture; + + //Array rendering + + Vector probePositions; + Vector probeWorldToObj; + Vector probeBBMin; + Vector probeBBMax; + Vector probeUseSphereMode; + Vector probeRadius; + Vector probeAttenuation; + Vector cubeMaps; + Vector irradMaps; + + GFXCubemapArrayHandle mCubemapArray; + GFXCubemapArrayHandle mIrradArray; public: RenderProbeMgr(); RenderProbeMgr(RenderInstType riType, F32 renderOrder, F32 processAddOrder);