diff --git a/Engine/source/materials/processedCustomMaterial.cpp b/Engine/source/materials/processedCustomMaterial.cpp index 3d57e0592..decace478 100644 --- a/Engine/source/materials/processedCustomMaterial.cpp +++ b/Engine/source/materials/processedCustomMaterial.cpp @@ -39,6 +39,7 @@ #include "console/simFieldDictionary.h" #include "console/propertyParsing.h" #include "gfx/util/screenspace.h" +#include "scene/reflectionManager.h" ProcessedCustomMaterial::ProcessedCustomMaterial(Material &mat) @@ -346,7 +347,13 @@ void ProcessedCustomMaterial::setTextureStages( SceneRenderState *state, const S } case Material::BackBuff: { - GFX->setTexture( samplerRegister, sgData.backBuffTex ); + if ( sgData.reflectTex ) + GFX->setTexture( samplerRegister, sgData.reflectTex ); + else + { + GFXTextureObject *refractTex = REFLECTMGR->getRefractTex( true ); + GFX->setTexture( samplerRegister, refractTex ); + } break; } case Material::ReflectBuff: diff --git a/Engine/source/scene/reflectionManager.cpp b/Engine/source/scene/reflectionManager.cpp index 7ef64f240..98eaee120 100644 --- a/Engine/source/scene/reflectionManager.cpp +++ b/Engine/source/scene/reflectionManager.cpp @@ -236,7 +236,7 @@ GFXTexHandle ReflectionManager::allocRenderTarget( const Point2I &size ) avar("%s() - mReflectTex (line %d)", __FUNCTION__, __LINE__) ); } -GFXTextureObject* ReflectionManager::getRefractTex() +GFXTextureObject* ReflectionManager::getRefractTex( bool forceUpdate ) { GFXTarget *target = GFX->getActiveRenderTarget(); GFXFormat targetFormat = target->getFormat(); @@ -261,7 +261,7 @@ GFXTextureObject* ReflectionManager::getRefractTex() mUpdateRefract = true; } - if ( mUpdateRefract ) + if ( forceUpdate || mUpdateRefract ) { target->resolveTo( mRefractTex ); mUpdateRefract = false; diff --git a/Engine/source/scene/reflectionManager.h b/Engine/source/scene/reflectionManager.h index 3d392af75..1fbd46e0e 100644 --- a/Engine/source/scene/reflectionManager.h +++ b/Engine/source/scene/reflectionManager.h @@ -101,7 +101,7 @@ public: GFXTexHandle allocRenderTarget( const Point2I &size ); - GFXTextureObject* getRefractTex(); + GFXTextureObject* getRefractTex( bool forceUpdate = false ); BaseMatInstance* getReflectionMaterial( BaseMatInstance *inMat ) const;