我打算通过RenderScript处理RGB数据。
为此,我在Java中创建了Allocations并将它们传递给RS Kernel函数,如下所示:
uchar3 __attribute__((kernel)) invert(uchar3 v_in, uint32_t v_out) {
v_in.r = ...;
v_in.g = ...;
v_in.b = ...;
}
但理想情况下,我希望以类似的方式处理v_out
,即设置v_out.r,v_out.g和v_out.b的值。目前我无法使用uint32_t v_out
。
现在,如果我将上述RS内核定义为:
uchar3 __attribute__((kernel)) invert(uchar3 v_in, uchar3 v_out) {
...
}
我得到以下编译时错误: 错误:意外的内核invert()参数' v_out'类型' uchar3 *'
请建议如何解决此问题。
编译时间:
error: Unexpected kernel invert() parameter 'v_out' of type 'uchar3 *'
答案 0 :(得分:1)
你应该将其定义为
uchar3 __attribute__((kernel)) invert(uchar3 in);
该函数将反映为ScriptC_.forEach_invert(Allocation in,Allocation out)。 in中的每个元素都将被传递给invert,而从invert返回的每个值都将被写入out中的相应位置。
答案 1 :(得分:1)
定义您自己的uchar3类型的局部变量,然后在返回之前填充它:
uchar3 __attribute__((kernel)) invert(uchar3 in) {
uchar3 out;
out.r = ...
out.g = ...
out.b = ...
return out;
}
编译器足够聪明,可以注意到你在做什么,因此不会有输出项的其他副本。