В MonoGame у меня есть пиксельный шейдер, который имеет два выходных цвета.
Первый - это обычный цвет, рисуемый для стандартной 4-канальной 32-битной цветовой цели визуализации.
Вторым является z-индекс, отрисованный для одноканальной 16-битной цели рендеринга HalfSingle.
Я хочу сделать альфа-смешивание на первом цвете, но не на z-index.
Есть ли способ сделать это без объявления сэмплера для базовой текстуры и выполнения alphablendingвручную?
matrix WorldViewProjection;
Texture2D SpriteTexture;
sampler2D SpriteTextureSampler = sampler_state
{
Texture = <SpriteTexture>;
};
struct VertexShaderOutput
{
float4 Position : SV_POSITION;
float4 Color : COLOR0;
float2 TextureCoordinates : TEXCOORD0;
float2 depth : TEXCOORD1;
};
struct PS_OUTPUT
{
float4 color : COLOR0;
float4 depth : COLOR1;
};
VertexShaderOutput SpriteVertexShader(float4 position : POSITION0, float2 float4 color : COLOR0, float2 texCoord : TEXCOORD0)
{
VertexShaderOutput output = (VertexShaderOutput)0;
output.Position = mul(position, WorldViewProjection);
output.Color = color;
output.TextureCoordinates = texCoord;
output.depth.x = position.z;
return output;
}
PS_OUTPUT SpritePixelShader(VertexShaderOutput input) : COLOR
{
PS_OUTPUT output = (PS_OUTPUT)0;
float4 color = tex2D(SpriteTextureSampler, input.TextureCoordinates) * input.Color;
output.color = color;
output.depth.x = input.depth.x;
return output;
}
technique SpriteDrawing
{
pass P0
{
VertexShader = compile vs_2_0 SpriteVertexShader();
PixelShader = compile ps_2_0 SpritePixelShader();
}
};