__attribute __(内核)函数的函数签名和“OutAllocation”的用法

时间:2013-12-09 16:15:59

标签: android renderscript

我打算通过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 *'

2 个答案:

答案 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;
}

编译器足够聪明,可以注意到你在做什么,因此不会有输出项的其他副本。