为了提高性能,我使用Effects将一些CPU任务卸载到GPU上。这就是我的HLSL代码:
float angle;
extern float2 direction;
float4 PixelShaderFunction(float4 pos : SV_POSITION, float4 color : COLOR0, float2 coords : TEXCOORD0) : COLOR
{
angle = atan2(direction.x, -direction.y);
return float4(1, 1, 1, 1);
}
technique DefaultTechnique
{
pass Pass1
{
PixelShader = compile ps_2_0 PixelShaderFunction();
}
}
在Emitter类中,我设置方向,应用技术,然后检索"角度"变量:
gpu.SetValue("direction", particles[i].Velocity);
for (int i = 0; i < effect.CurrentTechnique.Passes.Count; i++)
effect.CurrentTechnique.Passes[i].Apply();
particles[i].Angle = gpu.RetrieveFloat("angle");
这样运行正常,没有崩溃。然而,&#34;角度&#34;值总是为0.我的HLSL技能不是很好,但代码看起来就像它应该按预期工作。
任何建议都表示赞赏。