Ver código fonte

Merge pull request #1829 from irei1as/patch-1

Adding depth option to the texture of guiOffscreenCanvas
Anis 8 anos atrás
pai
commit
d164781329

+ 11 - 0
Engine/source/gui/core/guiOffscreenCanvas.cpp

@@ -18,6 +18,7 @@ GuiOffscreenCanvas::GuiOffscreenCanvas()
    mTargetName = "offscreenCanvas";
    mTargetDirty = true;
    mDynamicTarget = false;
+   mUseDepth = false;
 }
 
 GuiOffscreenCanvas::~GuiOffscreenCanvas()
@@ -30,6 +31,7 @@ void GuiOffscreenCanvas::initPersistFields()
    addField( "targetFormat", TypeGFXFormat, Offset( mTargetFormat, GuiOffscreenCanvas ), "");
    addField( "targetName", TypeRealString, Offset( mTargetName, GuiOffscreenCanvas ), "");
    addField( "dynamicTarget", TypeBool, Offset( mDynamicTarget, GuiOffscreenCanvas ), "");
+   addField( "useDepth", TypeBool, Offset( mUseDepth, GuiOffscreenCanvas ), "");
 
    Parent::initPersistFields();
 }
@@ -70,6 +72,7 @@ void GuiOffscreenCanvas::onRemove()
 
    mTarget = NULL;
    mTargetTexture = NULL;
+   mTargetDepth = NULL;
 
    Parent::onRemove();
 }
@@ -89,6 +92,13 @@ void GuiOffscreenCanvas::_setupTargets()
       mTargetTexture.set( mTargetSize.x, mTargetSize.y, mTargetFormat, &GFXDefaultRenderTargetProfile, avar( "%s() - (line %d)", __FUNCTION__, __LINE__ ), 1, 0 );
    }
 
+   // Update depth if needed
+   if (mUseDepth && (!mTargetDepth.isValid() || mTargetSize != mTargetDepth.getWidthHeight()))
+   {
+      mTargetDepth.set( mTargetSize.x, mTargetSize.y, GFXFormatD24S8, &GFXDefaultZTargetProfile, avar( "%s() - (line %d)", __FUNCTION__, __LINE__ ), 1, 0 );
+      mTarget->attachTexture( GFXTextureTarget::RenderSlot(GFXTextureTarget::DepthStencil), mTargetDepth );
+   }
+
    mTarget->attachTexture( GFXTextureTarget::RenderSlot(GFXTextureTarget::Color0), mTargetTexture );
    mNamedTarget.setTexture(0, mTargetTexture);
 }
@@ -97,6 +107,7 @@ void GuiOffscreenCanvas::_teardownTargets()
 {
    mNamedTarget.release();
    mTargetTexture = NULL;
+   mTargetDepth = NULL;
    mTargetDirty = true;
 }
 

+ 3 - 0
Engine/source/gui/core/guiOffscreenCanvas.h

@@ -56,6 +56,9 @@ protected:
 
    bool mTargetDirty;
    bool mDynamicTarget;
+   
+   bool mUseDepth;
+   GFXTexHandle mTargetDepth;
 
 public:
    static Vector<GuiOffscreenCanvas*> sList;