Вы пытаетесь маскировать альфа-канал. Самый простой способ - запечь альфа-канал, используя конвейер контента.Но если по какой-то причине вы хотите сделать это во время выполнения, вот как (грубо) используя цель рендеринга (лучшее и более быстрое решение - написать шейдер)
Сначала создайте RenderTarget2D для хранения и промежуточной маскированной текстуры
RenderTarget2D maskRenderTarget = GfxComponent.CreateRenderTarget(GraphicsDevice,
1, SurfaceFormat.Single);
Установить renderTarget и состояние устройства
GraphicsDevice.SetRenderTarget(0, maskRenderTarget);
GraphicsDevice.RenderState.AlphaBlendEnable = true;
GraphicsDevice.RenderState.DestinationBlend = Blend.Zero;
GraphicsDevice.RenderState.SourceBlend = Blend.One;
Установить каналы для записи в каналы R, G, B и нарисовать первую текстуру, используя пакет спрайтов
GraphicsDevice.RenderState.ColorWriteChannels = ColorWriteChannels.Red | ColorWriteChannels.Green | ColorWriteChannels.Blue;
spriteBatch.Draw(bg, new Vector2(0, 0), Color.White);
Установите каналы только в альфа-канал и нарисуйте альфа-маску
GraphicsDevice.RenderState.ColorWriteChannels = ColorWriteChannels.Alpha;
spriteBatch.Draw(circle, new Vector2(0, 0), Color.White);
Теперь вы можете восстановить цель рендеринга в обратном буфере и нарисовать текстуру, используя альфа-смешение.*
Также не забудьте восстановить состояние:
GraphicsDevice.RenderState.ColorWriteChannels = ColorWriteChannels.All;
...