在 rsForEach 之后,内核函数中的 rsSetElementAt 是否同步?

问题描述

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 (将#修改为@)