From 47c36ff59d51e54fba6b6832c7d4334139479f99 Mon Sep 17 00:00:00 2001 From: Azaezel Date: Wed, 28 Nov 2018 18:12:12 -0600 Subject: [PATCH] THIS IS AN ABOMINATION UNTO THE CODEBASE AND SHOULD BE REMOVED THE SECOND WE CAN SORT OUT WHAT THE HECK IS GOING ON WITH THAT QSORT stops flickering by itterating through the probe list twice. once looking for the skylight, then doing the rest --- .../source/renderInstance/renderProbeMgr.cpp | 119 ++++++++++-------- 1 file changed, 68 insertions(+), 51 deletions(-) diff --git a/Engine/source/renderInstance/renderProbeMgr.cpp b/Engine/source/renderInstance/renderProbeMgr.cpp index 2b086ffb9..39426c3f1 100644 --- a/Engine/source/renderInstance/renderProbeMgr.cpp +++ b/Engine/source/renderInstance/renderProbeMgr.cpp @@ -222,7 +222,7 @@ void RenderProbeMgr::render( SceneRenderState *state ) _setupPerFrameParameters(state); //Order the probes by size, biggest to smallest - dQsort(ProbeRenderInst::all.address(), ProbeRenderInst::all.size(), sizeof(const ProbeRenderInst*), AscendingReflectProbeInfluence); + //dQsort(ProbeRenderInst::all.address(), ProbeRenderInst::all.size(), sizeof(const ProbeRenderInst*), AscendingReflectProbeInfluence); //Specular PROFILE_START(RenderProbeManager_ReflectProbeRender); @@ -232,68 +232,85 @@ void RenderProbeMgr::render( SceneRenderState *state ) for (U32 i = 0; i < ProbeRenderInst::all.size(); i++) { - ProbeRenderInst* curEntry = ProbeRenderInst::all[i]; + ProbeRenderInst* curEntry = ProbeRenderInst::all[i]; - if (!curEntry->mIsEnabled) - continue; + if (!curEntry->mIsEnabled) + continue; - if (curEntry->numPrims == 0) - continue; + if (curEntry->numPrims == 0) + continue; - if (curEntry->mIsSkylight && (!skylightMat || !skylightMat->matInstance)) - continue; + if (curEntry->mIsSkylight && (!skylightMat || !skylightMat->matInstance)) + continue; - if (!curEntry->mIsSkylight && (!reflProbeMat || !reflProbeMat->matInstance)) - break; + if (!curEntry->mIsSkylight && (!reflProbeMat || !reflProbeMat->matInstance)) + break; - //Setup - MatrixF probeTrans = curEntry->getTransform(); + if (curEntry->mIsSkylight) + { + //Setup + MatrixF probeTrans = curEntry->getTransform(); - if (!curEntry->mIsSkylight) - { - if (curEntry->mProbeShapeType == ProbeRenderInst::Sphere) - probeTrans.scale(curEntry->mRadius * 1.01f); - } - else - { - probeTrans.scale(10); //force it to be big enough to surround the camera - } + // Set geometry + GFX->setVertexBuffer(curEntry->vertBuffer); + GFX->setPrimitiveBuffer(curEntry->primBuffer); + probeTrans.scale(10); //force it to be big enough to surround the camera + sgData.objTrans = &probeTrans; + skylightMat->setProbeParameters(curEntry, state, worldToCameraXfm); - sgData.objTrans = &probeTrans; + while (skylightMat->matInstance->setupPass(state, sgData)) + { + // Set transforms + matrixSet.setWorld(*sgData.objTrans); + skylightMat->matInstance->setTransforms(matrixSet, state); + skylightMat->matInstance->setSceneInfo(state, sgData); - if(curEntry->mIsSkylight) - skylightMat->setProbeParameters(curEntry, state, worldToCameraXfm); - else - reflProbeMat->setProbeParameters(curEntry, state, worldToCameraXfm); + GFX->drawPrimitive(GFXTriangleList, 0, curEntry->numPrims); + } + } + } - // Set geometry - GFX->setVertexBuffer(curEntry->vertBuffer); - GFX->setPrimitiveBuffer(curEntry->primBuffer); + for (U32 i = 0; i < ProbeRenderInst::all.size(); i++) + { + ProbeRenderInst* curEntry = ProbeRenderInst::all[i]; - if (curEntry->mIsSkylight) - { - while (skylightMat->matInstance->setupPass(state, sgData)) - { - // Set transforms - matrixSet.setWorld(*sgData.objTrans); - skylightMat->matInstance->setTransforms(matrixSet, state); - skylightMat->matInstance->setSceneInfo(state, sgData); + if (!curEntry->mIsEnabled) + continue; - GFX->drawPrimitive(GFXTriangleList, 0, curEntry->numPrims); - } - } - else - { - while (reflProbeMat->matInstance->setupPass(state, sgData)) - { - // Set transforms - matrixSet.setWorld(*sgData.objTrans); - reflProbeMat->matInstance->setTransforms(matrixSet, state); - reflProbeMat->matInstance->setSceneInfo(state, sgData); + if (curEntry->numPrims == 0) + continue; - GFX->drawPrimitive(GFXTriangleList, 0, curEntry->numPrims); - } - } + if (curEntry->mIsSkylight && (!skylightMat || !skylightMat->matInstance)) + continue; + + if (!curEntry->mIsSkylight && (!reflProbeMat || !reflProbeMat->matInstance)) + break; + + //Setup + MatrixF probeTrans = curEntry->getTransform(); + + if (!curEntry->mIsSkylight) + { + if (curEntry->mProbeShapeType == ProbeRenderInst::Sphere) + probeTrans.scale(curEntry->mRadius * 1.01f); + + sgData.objTrans = &probeTrans; + + reflProbeMat->setProbeParameters(curEntry, state, worldToCameraXfm); + + // Set geometry + GFX->setVertexBuffer(curEntry->vertBuffer); + GFX->setPrimitiveBuffer(curEntry->primBuffer); + while (reflProbeMat->matInstance->setupPass(state, sgData)) + { + // Set transforms + matrixSet.setWorld(*sgData.objTrans); + reflProbeMat->matInstance->setTransforms(matrixSet, state); + reflProbeMat->matInstance->setSceneInfo(state, sgData); + + GFX->drawPrimitive(GFXTriangleList, 0, curEntry->numPrims); + } + } } GFX->popActiveRenderTarget();