Bläddra i källkod

ensure we've got a known stateblock set for GeneratePrefilterMap

AzaezelX 5 år sedan
förälder
incheckning
1a33d483a3

+ 14 - 0
Engine/source/T3D/lighting/IBLUtilities.cpp

@@ -138,6 +138,20 @@ namespace IBLUtilities
       GFXShaderConstHandle* prefilterMipSizeSC = prefilterShader->getShaderConstHandle("$mipSize");
       GFXShaderConstHandle* prefilterMipSizeSC = prefilterShader->getShaderConstHandle("$mipSize");
       GFXShaderConstHandle* prefilterResolutionSC = prefilterShader->getShaderConstHandle("$resolution");
       GFXShaderConstHandle* prefilterResolutionSC = prefilterShader->getShaderConstHandle("$resolution");
 
 
+      GFXStateBlockDesc desc;
+      desc.zEnable = false;
+      desc.samplersDefined = true;
+      desc.samplers[0].addressModeU = GFXAddressClamp;
+      desc.samplers[0].addressModeV = GFXAddressClamp;
+      desc.samplers[0].addressModeW = GFXAddressClamp;
+      desc.samplers[0].magFilter = GFXTextureFilterLinear;
+      desc.samplers[0].minFilter = GFXTextureFilterLinear;
+      desc.samplers[0].mipFilter = GFXTextureFilterLinear;
+
+      GFXStateBlockRef preStateBlock;
+      preStateBlock = GFX->createStateBlock(desc);
+      GFX->setStateBlock(preStateBlock);
+
       GFX->pushActiveRenderTarget();
       GFX->pushActiveRenderTarget();
       GFX->setShader(prefilterShader);
       GFX->setShader(prefilterShader);
       GFX->setShaderConstBuffer(prefilterConsts);
       GFX->setShaderConstBuffer(prefilterConsts);

+ 12 - 10
Engine/source/renderInstance/renderProbeMgr.cpp

@@ -36,6 +36,7 @@
 #include "materials/shaderData.h"
 #include "materials/shaderData.h"
 
 
 #include "gfx/gfxTextureManager.h"
 #include "gfx/gfxTextureManager.h"
+#include "scene/reflectionManager.h"
 
 
 #include "postFx/postEffect.h"
 #include "postFx/postEffect.h"
 #include "T3D/lighting/reflectionProbe.h"
 #include "T3D/lighting/reflectionProbe.h"
@@ -919,6 +920,14 @@ void RenderProbeMgr::bakeProbe(ReflectionProbe *probe)
    if (!renderWithProbes)
    if (!renderWithProbes)
       RenderProbeMgr::smRenderReflectionProbes = false;
       RenderProbeMgr::smRenderReflectionProbes = false;
 
 
+   GFXFormat reflectFormat;
+
+   if (clientProbe->mUseHDRCaptures)
+      reflectFormat = GFXFormatR16G16B16A16F;
+   else
+      reflectFormat = GFXFormatR8G8B8A8;
+   const GFXFormat oldRefFmt = REFLECTMGR->getReflectFormat();
+   REFLECTMGR->setReflectFormat(reflectFormat);
    cubeRefl.updateReflection(reflParams);
    cubeRefl.updateReflection(reflParams);
 
 
    //Now, save out the maps
    //Now, save out the maps
@@ -929,16 +938,8 @@ void RenderProbeMgr::bakeProbe(ReflectionProbe *probe)
       clientProbe->createClientResources();
       clientProbe->createClientResources();
 
 
       //Prep it with whatever resolution we've dictated for our bake
       //Prep it with whatever resolution we've dictated for our bake
-      if (clientProbe->mUseHDRCaptures)
-      {
-         clientProbe->mIrridianceMap->mCubemap->initDynamic(resolution, GFXFormatR16G16B16A16F);
-         clientProbe->mPrefilterMap->mCubemap->initDynamic(resolution, GFXFormatR16G16B16A16F);
-      }
-      else
-      {
-         clientProbe->mIrridianceMap->mCubemap->initDynamic(resolution, GFXFormatR8G8B8A8);
-         clientProbe->mPrefilterMap->mCubemap->initDynamic(resolution, GFXFormatR8G8B8A8);
-      }
+      clientProbe->mIrridianceMap->mCubemap->initDynamic(resolution, reflectFormat);
+      clientProbe->mPrefilterMap->mCubemap->initDynamic(resolution, reflectFormat);
 
 
       GFXTextureTargetRef renderTarget = GFX->allocRenderToTextureTarget(false);
       GFXTextureTargetRef renderTarget = GFX->allocRenderToTextureTarget(false);
 
 
@@ -969,6 +970,7 @@ void RenderProbeMgr::bakeProbe(ReflectionProbe *probe)
    probe->setMaskBits(-1);
    probe->setMaskBits(-1);
 
 
    Con::warnf("RenderProbeMgr::bake() - Finished bake! Took %g milliseconds", diffTime);
    Con::warnf("RenderProbeMgr::bake() - Finished bake! Took %g milliseconds", diffTime);
+   REFLECTMGR->setReflectFormat(oldRefFmt);
 }
 }
 
 
 void RenderProbeMgr::bakeProbes()
 void RenderProbeMgr::bakeProbes()