From de87d2f6adab4118c7bb01be2827f49c8b1f621a Mon Sep 17 00:00:00 2001 From: AzaezelX Date: Sat, 10 Feb 2024 13:36:55 -0600 Subject: [PATCH] fix guishapeedpreview not displaying IBL note this *does* require a baked skylight in the main scene todo: track down why a similar protocol does not operate for guimaterialpreview and guiobjectview --- Engine/source/T3D/guiMaterialPreview.cpp | 5 +++++ Engine/source/T3D/guiObjectView.cpp | 9 +++++++++ Engine/source/T3D/lighting/reflectionProbe.h | 1 + Engine/source/T3D/lighting/skylight.cpp | 4 ++++ Engine/source/T3D/lighting/skylight.h | 1 + Engine/source/gui/editor/guiShapeEdPreview.cpp | 4 ++++ 6 files changed, 24 insertions(+) diff --git a/Engine/source/T3D/guiMaterialPreview.cpp b/Engine/source/T3D/guiMaterialPreview.cpp index ad1de4c2d..4d5bf78fc 100644 --- a/Engine/source/T3D/guiMaterialPreview.cpp +++ b/Engine/source/T3D/guiMaterialPreview.cpp @@ -33,6 +33,8 @@ #include "core/resourceManager.h" #include "scene/sceneManager.h" #include "scene/sceneRenderState.h" +#include "renderInstance/renderProbeMgr.h" +#include "T3D/lighting/skylight.h" // GuiMaterialPreview GuiMaterialPreview::GuiMaterialPreview() @@ -372,6 +374,9 @@ void GuiMaterialPreview::renderWorld(const RectI &updateRect) FogData savedFogData = gClientSceneGraph->getFogData(); gClientSceneGraph->setFogData( FogData() ); // no fog in preview window + if (Skylight::smSkylightProbe.isValid()) + PROBEMGR->submitProbe(Skylight::smSkylightProbe->getProbeInfo()); + RenderPassManager* renderPass = gClientSceneGraph->getDefaultRenderPass(); SceneRenderState state ( diff --git a/Engine/source/T3D/guiObjectView.cpp b/Engine/source/T3D/guiObjectView.cpp index 9dfc13a5d..be35cd7e2 100644 --- a/Engine/source/T3D/guiObjectView.cpp +++ b/Engine/source/T3D/guiObjectView.cpp @@ -31,6 +31,8 @@ #include "math/mathTypes.h" #include "gfx/gfxTransformSaver.h" #include "console/engineAPI.h" +#include "renderInstance/renderProbeMgr.h" +#include "T3D/lighting/skylight.h" IMPLEMENT_CONOBJECT( GuiObjectView ); @@ -541,6 +543,12 @@ void GuiObjectView::renderWorld( const RectI& updateRect ) // Render primary model. + if (Skylight::smSkylightProbe.isValid()) + PROBEMGR->submitProbe(Skylight::smSkylightProbe->getProbeInfo()); + + FogData savedFogData = gClientSceneGraph->getFogData(); + gClientSceneGraph->setFogData(FogData()); // no fog in preview window + if(mModelInstance) { if( mRunThread ) @@ -567,6 +575,7 @@ void GuiObjectView::renderWorld( const RectI& updateRect ) renderPass->renderPass( &state ); + gClientSceneGraph->setFogData(savedFogData); // restore fog setting // Make sure to remove our fake sun. LIGHTMGR->unregisterAllLights(); } diff --git a/Engine/source/T3D/lighting/reflectionProbe.h b/Engine/source/T3D/lighting/reflectionProbe.h index deca62318..9bc59e11c 100644 --- a/Engine/source/T3D/lighting/reflectionProbe.h +++ b/Engine/source/T3D/lighting/reflectionProbe.h @@ -378,6 +378,7 @@ public: /// Invokes a cubemap bake action for this probe /// void bake(); + ProbeInfo* getProbeInfo() { return &mProbeInfo; } }; typedef ReflectionProbe::ProbeInfo::ProbeShapeType ReflectProbeType; diff --git a/Engine/source/T3D/lighting/skylight.cpp b/Engine/source/T3D/lighting/skylight.cpp index 3c9d6da5e..b553a028e 100644 --- a/Engine/source/T3D/lighting/skylight.cpp +++ b/Engine/source/T3D/lighting/skylight.cpp @@ -59,6 +59,8 @@ extern bool gEditingMission; extern ColorI gCanvasClearColor; bool Skylight::smRenderSkylights = true; +SimObjectPtr Skylight::smSkylightProbe = nullptr; + IMPLEMENT_CO_NETOBJECT_V1(Skylight); ConsoleDocClass(Skylight, @@ -117,6 +119,8 @@ bool Skylight::onAdd() if (!Parent::onAdd()) return false; + if (isClientObject()) + smSkylightProbe = this; return true; } diff --git a/Engine/source/T3D/lighting/skylight.h b/Engine/source/T3D/lighting/skylight.h index 9735b0b3b..2503b1dff 100644 --- a/Engine/source/T3D/lighting/skylight.h +++ b/Engine/source/T3D/lighting/skylight.h @@ -108,6 +108,7 @@ public: void prepRenderImage(SceneRenderState *state); void setPreviewMatParameters(SceneRenderState* renderState, BaseMatInstance* mat); + static SimObjectPtr smSkylightProbe; }; #endif // _Skylight_H_ diff --git a/Engine/source/gui/editor/guiShapeEdPreview.cpp b/Engine/source/gui/editor/guiShapeEdPreview.cpp index 10cfaf28d..e19138004 100644 --- a/Engine/source/gui/editor/guiShapeEdPreview.cpp +++ b/Engine/source/gui/editor/guiShapeEdPreview.cpp @@ -37,6 +37,8 @@ #include "T3D/assets/ShapeAsset.h" #include "T3D/assets/ShapeAnimationAsset.h" +#include "renderInstance/renderProbeMgr.h" +#include "T3D/lighting/skylight.h" #ifdef TORQUE_COLLADA #include "collision/optimizedPolyList.h" @@ -1409,6 +1411,8 @@ void GuiShapeEdPreview::renderWorld(const RectI &updateRect) FogData savedFogData = gClientSceneGraph->getFogData(); gClientSceneGraph->setFogData( FogData() ); // no fog in preview window + if (Skylight::smSkylightProbe.isValid()) + PROBEMGR->submitProbe(Skylight::smSkylightProbe->getProbeInfo()); SceneRenderState state ( gClientSceneGraph,