如何注册支持可变输入数量的Direct2D自定义效果?
解决Direct2D自定义效果可变输入数量的XML注册问题
要实现类似Composite Effect的可变输入功能,你不能完全省略<Input>节点,而是需要通过配置输入数量范围+保留单个输入模板的方式实现,具体修改如下:
核心修改要点
- 设置输入数量范围:在
<Effect>根元素内部添加<minInputCount>和<maxInputCount>子元素,指定允许的输入数量区间:<minInputCount>:设置最少需要的输入数量(比如Composite Effect要求至少2个输入,就设为2)<maxInputCount>:设置最多允许的输入数量,设为0表示无上限
- 保留输入模板:必须至少定义一个
<Input>节点作为模板,Direct2D会根据输入数量范围自动扩展输入实例。
示例修改后的XML
<Effect> <Property name="DisplayName" type="string" value="My Custom Variable Input Effect"/> <Property name="Author" type="string" value="Your Name"/> <!-- 配置可变输入范围:最少2个输入,无上限 --> <minInputCount>2</minInputCount> <maxInputCount>0</maxInputCount> <!-- 输入模板,索引从0开始 --> <Input name="Source" index="0"/> </Effect>
额外注意事项
- 你的效果实现类(继承
ID2D1EffectImpl)需要重写GetInputCount方法,返回当前实际的输入数量; - 在
Process方法中,要遍历所有输入纹理进行处理,确保逻辑支持多输入的情况。
之前省略所有<Input>节点导致E_INVALIDARG,是因为Direct2D无法识别该效果的输入结构,必须保留至少一个输入模板来定义输入的基本属性。
内容的提问来源于stack exchange,提问作者Nan_o
相关产品推荐
相关产品推荐

