如何设置float2类型的HLSL参数?

时间:2013-01-21 18:41:34

标签: c# c#-4.0 xna hlsl

我想知道如何使用C#在HLSL着色器效果p中设置float2类型的参数e

e.Parameters["p.x"].SetValue(1); 
e.Parameters["p.y"].SetValue(2); 

似乎行不通。

2 个答案:

答案 0 :(得分:5)

e.Parameters["p"].SetValue(new Vector2(1, 2));

答案 1 :(得分:1)

当使用暴露结构类型的属性时,如果想要更新某些部分而不更新另一部分,则经常需要使用如下模式:

var temp = thing.SomeProperty;
temp.X = 1;
thing.SomeProperty = temp;

在您的特定情况下,您似乎想要重写所讨论的结构的所有组件;如果是这种情况,你可以简单地构造一个新的struct实例并存储它;没有理由先读出旧的。虽然有些人可能更喜欢格式

var temp = thing.SomeProperty;
temp.X = new Vector2(1, temp.Y);
thing.SomeProperty = temp;

我不太喜欢它,因为它使得更难判断哪些字段被修改或未被修改,特别是如果存在任何不需要指定所有字段值的构造函数重载。