我想知道如何使用C#在HLSL着色器效果p
中设置float2
类型的参数e
?
e.Parameters["p.x"].SetValue(1);
e.Parameters["p.y"].SetValue(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;
我不太喜欢它,因为它使得更难判断哪些字段被修改或未被修改,特别是如果存在任何不需要指定所有字段值的构造函数重载。