Мне удалось сделать это в XNA 3.1, однако я вижу, что теперь мы используем объекты состояний в XNA 4, что, безусловно, является улучшением, хотя я пока не могу достичь того, чего хочу:)
Я пытаюсь:
Очистить буфер трафарета до 0.
Нарисуйте текстуру в буфере трафарета, установив для буфера трафарета значение 1, в котором рисуется текстура.
Нарисуйте еще одну текстуру, которая появится только там, где буфер трафарета не равен 1.
Вот то, что я имею до сих пор, но это никак не влияет на рисование текстуры 2:
BlendState blend = new BlendState();
blend.ColorWriteChannels = ColorWriteChannels.None;
_preSparkStencil = new DepthStencilState();
_preSparkStencil.StencilEnable = true;
_preSparkStencil.StencilFunction = CompareFunction.Always;
_preSparkStencil.ReferenceStencil = 1;
_preSparkStencil.DepthBufferEnable = true;
_sparkStencil = new DepthStencilState();
_sparkStencil.StencilEnable = true;
_sparkStencil.StencilFunction = CompareFunction.NotEqual;
_sparkStencil.ReferenceStencil = 1;
_sparkStencil.DepthBufferEnable = true;
gd.DepthStencilState = _preSparkStencil;
gd.Clear(ClearOptions.Stencil, Color.Black, 0, 0);
sb.Begin(SpriteSortMode.Deferred, blend);
DrawTexture1();
sb.End();
gd.DepthStencilState = _sparkStencil;
sb.Begin(SpriteSortMode.Deferred, BlendState.NonPremultiplied);
DrawTexture2();
sb.End();
gd.DepthStencilState = old;