From d2dd2b4e1a37bc77f3d4ff17477987affdb2fddd Mon Sep 17 00:00:00 2001 From: Azaezel Date: Fri, 15 Sep 2017 13:46:19 -0500 Subject: [PATCH] fix(es) for volumetric fog when dealing with dedicated servers. --- Engine/source/environment/VolumetricFog.cpp | 15 ++++++++------- .../source/environment/VolumetricFogRTManager.cpp | 9 ++++++++- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/Engine/source/environment/VolumetricFog.cpp b/Engine/source/environment/VolumetricFog.cpp index 9235611d1..2dd627075 100644 --- a/Engine/source/environment/VolumetricFog.cpp +++ b/Engine/source/environment/VolumetricFog.cpp @@ -244,6 +244,8 @@ bool VolumetricFog::onAdd() mSpeed.set(mSpeed1.x, mSpeed1.y, mSpeed2.x, mSpeed2.y); mInvScale = (1.0f / getMax(getMax(mObjScale.x, mObjScale.y), mObjScale.z)); + VFRTM->IncFogObjects(); + if (isClientObject()) { conn = GameConnection::getConnectionToServer(); @@ -270,8 +272,6 @@ bool VolumetricFog::onAdd() InitTexture(); return setupRenderer(); } - - VFRTM->IncFogObjects(); return true; } @@ -288,7 +288,7 @@ void VolumetricFog::onRemove() mGlowing = 0; glowFX->disable(); } - _leaveFog(static_cast(conn->getControlObject())); + _leaveFog(dynamic_cast(conn->getControlObject())); } VolumetricFogRTManager::getVolumetricFogRTMResizeSignal().remove(this, &VolumetricFog::handleResize); GuiCanvas::getCanvasSizeChangeSignal().remove(this, &VolumetricFog::handleCanvasResize); @@ -699,7 +699,9 @@ void VolumetricFog::processTick(const Move* move) } if (mCounter == 3) { - ShapeBase* control = static_cast(conn->getControlObject()); + ShapeBase* control = dynamic_cast(conn->getControlObject()); + if (!control) + return; MatrixF xfm; control->getRenderEyeTransform(&xfm); Point3F pos = xfm.getPosition(); @@ -971,9 +973,8 @@ void VolumetricFog::prepRenderImage(SceneRenderState *state) PROFILE_SCOPE(VolumetricFog_prepRenderImage); - // Time critical therefore static_cast - ShapeBase* control = static_cast(conn->getControlObject()); - if (control->getWaterCoverage() >= 0.9f && !mIgnoreWater) + ShapeBase* control = dynamic_cast(conn->getControlObject()); + if (!control || (control->getWaterCoverage() >= 0.9f && !mIgnoreWater)) return; camPos = state->getCameraPosition(); diff --git a/Engine/source/environment/VolumetricFogRTManager.cpp b/Engine/source/environment/VolumetricFogRTManager.cpp index 7b7b00d50..544fafbc8 100644 --- a/Engine/source/environment/VolumetricFogRTManager.cpp +++ b/Engine/source/environment/VolumetricFogRTManager.cpp @@ -132,7 +132,14 @@ bool VolumetricFogRTManager::Init() Con::errorf("VolumetricFogRTManager allready initialized!!"); return true; } - + + if (GFX->getAdapterType() == NullDevice) + { + mIsInitialized = true; + Con::errorf("VolumetricFogRTManager - Dedicated server"); + return true; + } + GuiCanvas* cv = dynamic_cast(Sim::findObject("Canvas")); if (cv == NULL) {