我正在创建一个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批处理开始时分配)没有异常等,但我得到的只是红色。整个输出是纯红色。可能是什么原因?我是着色器的新手,我正在努力了解它们是如何工作的,特别是对于采样器。谢谢。
答案 0 :(得分:2)
如果我没错,你需要获得BGRA格式的像素数据,而不是RGBA。你能检查一下它是否适合你吗?
您可以查看这篇文章。 Creating a Lens application that uses HLSL effects for filters
此致
Pieter Voloshyn