Browse Source

Fix for Issue #124 for CustomMaterial Refraction

DavidWyand-GG 12 years ago
parent
commit
0047842b33

+ 8 - 1
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:

+ 2 - 2
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;

+ 1 - 1
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;