问题描述
在 RenderScript
document 中,它说 rsForEach
是一个同步函数。
这是一个同步函数。对该函数的调用仅返回 在输入的所有单元格完成所有工作后 分配。如果内核函数返回任何值,则调用等待 直到所有结果都写入输出分配。
因此,如果您向内核函数提供输出,则该输出将在函数返回时完成写入。如果我在内核函数中修改全局分配变量会怎样?函数返回时会写完吗?
例如:
rs_allocation gallocation;
int gallocationHeight;
void RS_KERNEL kernelFun(float value,int x) {
for(int y = 0; y < gallocationHeight; y++) {
RSSetElementAt_float(gallocation,value*y,x,y);
}
}
void invokeFun(rs_allocation input,rs_allocation output) {
//input: a length 10 1D allocation
//output: a 10x10 2D allocation
gallocation = output;
gallocationHeight = 10;
rsForEach(kernelFun,input);
//Is output ready here?
int value = rsGetElementAt_int(output,3,4);
//Will the value be correct? (should be input[3]*4)
}
根据我的经验,rsGetElementAt
返回旧值确实会发生,我不确定是什么导致它发生,而且很难调试。我怀疑这可能是原因之一。我也想知道如何同步它(在 rsForEach
之后读取正确的值)。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)