Windows phone 8 使用SharpDX和DirectX工具箱输出纯红色的像素着色器
我正在创建一个Windows Phone 8应用程序,我正在使用摄像头。当我不使用任何着色器时,我的C#代码可以完美地工作:Windows phone 8 使用SharpDX和DirectX工具箱输出纯红色的像素着色器,windows-phone-8,windows-phone,pixel-shader,sharpdx,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>(
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();
着色器运行良好(在sprite批处理开始时指定),没有异常等,但我得到的只是红色。整个输出为纯红色。原因可能是什么?我是一个新的着色器,我试图了解他们如何工作,特别是与采样器。谢谢。如果我没说错,您需要获取BGRA格式的像素数据,而不是RGBA格式的像素数据。你能检查一下它是否适合你吗 你可以查看这篇文章。 问候,
Pieter Voloshyn我实际上是在看那篇文章:)无论如何,我在从头开始编写了部分代码后解决了它,但从未找到真正的原因,这可能是一个我当时从未见过的bug。
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;
}