【发布时间】:2015-10-05 16:44:48
【问题描述】:
背景
我正在学习如何使用Renderscript,我在the docs找到了这部分:
在大多数方面,这与标准 C 函数相同。这 第一个值得注意的特性是应用于 函数原型。
他们展示了一个内核函数的示例代码:
uchar4 __attribute__((kernel)) invert(uchar4 in, uint32_t x, uint32_t y) {
uchar4 out = in;
out.r = 255 - in.r;
out.g = 255 - in.g;
out.b = 255 - in.b;
return out;
}
问题
似乎有些样本表明核函数的参数可以不同,而不仅仅是上面出现的那些。
例子:
uchar4 __attribute__((kernel)) grayscale(uchar4 v_in) {
float4 f4 = rsUnpackColor8888(v_in);
float3 mono = dot(f4.rgb, gMonoMult);
return rsPackColorTo8888(mono);
}
问题是,Java 上生成的函数对于所有这些函数仍然是相同的:
void forEach_FUNCTIONNAME(Allocation ain, Allocation aout)
其中 FUNCTIONNAME 是 RS 上的函数名称。
所以我假设不是每一个可能的函数都可以是核函数,都需要遵循一些规则(除了“attribute(kernel)”部分,需要添加) .
但我找不到这些规则。
文档中只有我找到的东西:
一个内核可能有一个输入分配,一个输出分配,或两者兼有。 一个内核可能不会有超过一个输入或一个输出分配。如果 需要多个输入或输出,这些对象应该是 绑定到 rs_allocation 脚本全局变量并从内核访问或 通过 rsGetElementAt_type() 或 rsSetElementAt_type() 调用的函数。 内核可以使用 x、y 和 z 参数。这些参数是可选的,但类型 坐标参数必须是 uint32_t。
问题
除了写的,还有什么创建内核函数的规则?
允许使用哪些其他参数?我的意思是,我可以传递哪些其他参数?我只能使用这两个“模板”的函数,还是可以使用具有其他参数集的其他内核函数?
是否有有效内核函数的列表?一个显示哪些参数集是允许的?
我是否可以自定义这些内核函数,以获得更多参数?例如,如果我制作了一个模糊函数(我知道我们有一个内置函数),我可以设置半径和模糊算法。
基本上所有这些问题都差不多
【问题讨论】:
标签: android renderscript