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



我正在创建一个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;
}

着色器运行良好(在精灵批处理开始时指定它),没有例外等,但我得到的只是红色。整个输出都是纯红色的。原因是什么?我是着色器的新手,我正在努力了解它们是如何工作的,尤其是采样器。非常感谢。

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

你可以查看这篇文章。创建一个镜头应用程序,使用HLSL效果过滤器

问候,

Pieter Voloshyn

最新更新