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