public bool Prepare(DeviceContextHolder contextHolder, SpecialRenderMode mode) {
if (mode == SpecialRenderMode.DeferredTransparentMask) return IsBlending;
if (mode == SpecialRenderMode.Reflection) {
_effect.FxDiffuseMap.SetResource(_txDiffuse);
_effect.FxNormalMap.SetResource(_txNormal);
_effect.FxMaterial.Set(_material);
} else {
if ((mode == SpecialRenderMode.DeferredTransparentForw || mode == SpecialRenderMode.DeferredTransparentDepth ||
mode == SpecialRenderMode.DeferredTransparentDef) && !IsBlending) return false;
_effect.FxMaterial.Set(_material);
_effect.FxDiffuseMap.SetResource(_txDiffuse);
_effect.FxNormalMap.SetResource(_txNormal);
_effect.FxDetailsMap.SetResource(_txDetails);
_effect.FxDetailsNormalMap.SetResource(_txDetailsNormal);
_effect.FxMapsMap.SetResource(_txMaps);
}
contextHolder.DeviceContext.InputAssembler.InputLayout = _effect.LayoutPNTG;
return true;
}