HLSL变量返回零到MonoGame

时间:2016-08-01 17:09:38

标签: xna monogame hlsl

为了提高性能,我使用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技能不是很好,但代码看起来就像它应该按预期工作。

任何建议都表示赞赏。

0 个答案:

没有答案