Merge pull request #2041 from Azaezel/clearTextureStateImmediate

method to make sure we're not getting pixel shader inputs mixed with …
This commit is contained in:
Areloch 2017-08-04 00:58:13 -05:00 committed by GitHub
commit 8a0074eb1d
4 changed files with 12 additions and 5 deletions

View file

@ -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)

View file

@ -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 )

View file

@ -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; }

View file

@ -406,7 +406,7 @@ void CubeReflector::updateFace( const ReflectParams &params, 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 );