diff --git a/Engine/source/environment/VolumetricFog.cpp b/Engine/source/environment/VolumetricFog.cpp index d0ed20665..9235611d1 100644 --- a/Engine/source/environment/VolumetricFog.cpp +++ b/Engine/source/environment/VolumetricFog.cpp @@ -1159,10 +1159,9 @@ void VolumetricFog::render(ObjectRenderInst *ri, SceneRenderState *state, BaseMa GFX->drawPrimitive(0); - // Ensure these two textures are bound to the pixel shader input on the second run as they are used as pixel shader outputs (render targets). - GFX->setTexture(1, NULL); //mDepthBuffer - GFX->setTexture(2, NULL); //mFrontBuffer - GFX->updateStates(); //update the dirty texture state we set above + // Ensure these two textures are NOT bound to the pixel shader input on the second run as they are used as pixel shader outputs (render targets). + GFX->clearTextureStateImmediate(1); //mDepthBuffer + GFX->clearTextureStateImmediate(2); //mFrontBuffer } void VolumetricFog::reflect_render(ObjectRenderInst *ri, SceneRenderState *state, BaseMatInstance *overrideMat) diff --git a/Engine/source/gfx/gfxDevice.cpp b/Engine/source/gfx/gfxDevice.cpp index 54c00f1e7..28add7718 100644 --- a/Engine/source/gfx/gfxDevice.cpp +++ b/Engine/source/gfx/gfxDevice.cpp @@ -572,6 +572,13 @@ void GFXDevice::updateStates(bool forceSetAll /*=false*/) #endif } +void GFXDevice::clearTextureStateImmediate(U32 stage) +{ + mCurrentTexture[stage] = NULL; + mCurrentCubemap[stage] = NULL; + setTextureInternal(stage, NULL); +} + void GFXDevice::setPrimitiveBuffer( GFXPrimitiveBuffer *buffer ) { if( buffer == mCurrentPrimitiveBuffer ) diff --git a/Engine/source/gfx/gfxDevice.h b/Engine/source/gfx/gfxDevice.h index 197249b47..eda49b4cd 100644 --- a/Engine/source/gfx/gfxDevice.h +++ b/Engine/source/gfx/gfxDevice.h @@ -967,6 +967,7 @@ public: /// @{ /// Sets the dirty Render/Texture/Sampler states from the caching system void updateStates(bool forceSetAll = false); + void clearTextureStateImmediate(U32 stage); /// Returns the forced global wireframe state. static bool getWireframe() { return smWireframe; } diff --git a/Engine/source/scene/reflector.cpp b/Engine/source/scene/reflector.cpp index dfe54537d..5d9bdc3a8 100644 --- a/Engine/source/scene/reflector.cpp +++ b/Engine/source/scene/reflector.cpp @@ -406,7 +406,7 @@ void CubeReflector::updateFace( const ReflectParams ¶ms, U32 faceidx ) matView.inverse(); GFX->setWorldMatrix(matView); - + GFX->clearTextureStateImmediate(0); renderTarget->attachTexture( GFXTextureTarget::Color0, cubemap, faceidx ); GFX->setActiveRenderTarget( renderTarget ); GFX->clear( GFXClearStencil | GFXClearTarget | GFXClearZBuffer, gCanvasClearColor, 1.0f, 0 );