使用SharpDX和DirectX工具包输出纯红色的像素着色器

时间:2013-08-20 22:47:26

标签: windows-phone-8 windows-phone pixel-shader sharpdx

我正在创建一个Windows Phone 8应用程序,我正在使用相机。当我不使用任何着色器时,我的C#代码完美运行:

    void photoDevice_PreviewFrameAvailable(ICameraCaptureDevice sender, object args)
    {    
        sender.GetPreviewBufferArgb(captureData);
        previewTexture.SetData<int>(captureData);
    }
...
    spriteBatch.Begin();
    spriteBatch.Draw(previewTexture, new Vector2(backBufferXCenter, backBufferYCenter), null, Color.White, (float)Math.PI / 2.0f,
        new Vector2(textureXCenter, textureYCenter), new Vector2(xScale, yScale), SpriteEffects.None, 0.0f);
    spriteBatch.End();

我正在实时获取相机输入。但是,我(只是尝试通过输入)尝试使用像素着色器:

Texture2D MyTexture : register(t0);
sampler textureSampler = sampler_state{
 Texture = (MyTexture);
 Filter = MIN_MAG_MIP_LINEAR;
};
...
float4 pixelShader(float4 color : COLOR0,
                     float2 texCoord : TEXCOORD0) : SV_Target0
{
   float4 textureColor = tex2D(textureSampler, texCoord);
   return textureColor;
}

着色器运行正常(在sprite批处理开始时分配)没有异常等,但我得到的只是红色。整个输出是纯红色。可能是什么原因?我是着色器的新手,我正在努力了解它们是如何工作的,特别是对于采样器。谢谢。

1 个答案:

答案 0 :(得分:2)

如果我没错,你需要获得BGRA格式的像素数据,而不是RGBA。你能检查一下它是否适合你吗?

您可以查看这篇文章。 Creating a Lens application that uses HLSL effects for filters

此致

Pieter Voloshyn