Pārlūkot izejas kodu

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

Azaezel 6 gadi atpakaļ
vecāks
revīzija
47c36ff59d
1 mainītis faili ar 72 papildinājumiem un 55 dzēšanām
  1. 72 55
      Engine/source/renderInstance/renderProbeMgr.cpp

+ 72 - 55
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->numPrims == 0)
+		   continue;
+
+	   if (curEntry->mIsSkylight && (!skylightMat || !skylightMat->matInstance))
+		   continue;
+
+	   if (!curEntry->mIsSkylight && (!reflProbeMat || !reflProbeMat->matInstance))
+		   break;
+
+	   if (curEntry->mIsSkylight)
+	   {
+		   //Setup
+		   MatrixF probeTrans = curEntry->getTransform();
+
+		   // 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);
+
+		   while (skylightMat->matInstance->setupPass(state, sgData))
+		   {
+			   // Set transforms
+			   matrixSet.setWorld(*sgData.objTrans);
+			   skylightMat->matInstance->setTransforms(matrixSet, state);
+			   skylightMat->matInstance->setSceneInfo(state, sgData);
+
+			   GFX->drawPrimitive(GFXTriangleList, 0, curEntry->numPrims);
+		   }
+	   }
+   }
 
-      if (!curEntry->mIsEnabled)
-         continue;
+   for (U32 i = 0; i < ProbeRenderInst::all.size(); i++)
+   {
+	   ProbeRenderInst* curEntry = ProbeRenderInst::all[i];
 
-      if (curEntry->numPrims == 0)
-         continue;
+	   if (!curEntry->mIsEnabled)
+		   continue;
 
-      if (curEntry->mIsSkylight && (!skylightMat || !skylightMat->matInstance))
-         continue;
+	   if (curEntry->numPrims == 0)
+		   continue;
 
-      if (!curEntry->mIsSkylight && (!reflProbeMat || !reflProbeMat->matInstance))
-         break;
+	   if (curEntry->mIsSkylight && (!skylightMat || !skylightMat->matInstance))
+		   continue;
 
-      //Setup
-      MatrixF probeTrans = curEntry->getTransform();
+	   if (!curEntry->mIsSkylight && (!reflProbeMat || !reflProbeMat->matInstance))
+		   break;
 
-      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
-      }
+	   //Setup
+	   MatrixF probeTrans = curEntry->getTransform();
+	   
+	   if (!curEntry->mIsSkylight)
+	   {
+		   if (curEntry->mProbeShapeType == ProbeRenderInst::Sphere)
+			   probeTrans.scale(curEntry->mRadius * 1.01f);
 
-      sgData.objTrans = &probeTrans;
+		   sgData.objTrans = &probeTrans;
 
-      if(curEntry->mIsSkylight)
-         skylightMat->setProbeParameters(curEntry, state, worldToCameraXfm);
-      else
-         reflProbeMat->setProbeParameters(curEntry, state, worldToCameraXfm);
-
-      // Set geometry
-      GFX->setVertexBuffer(curEntry->vertBuffer);
-      GFX->setPrimitiveBuffer(curEntry->primBuffer);
-
-      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);
-
-            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);
-
-            GFX->drawPrimitive(GFXTriangleList, 0, curEntry->numPrims);
-         }
-      }
+		   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();