【发布时间】:2016-01-18 14:18:19
【问题描述】:
所以我在 Renderscript 代码中有一个带有指针的结构:
typedef struct __attribute__((packed, aligned(4))) RGB {
float red;
float green;
float blue;
} RGB_t;
RGB_t *rgb;
这就是我为这个指针分配和绑定内存的方式:
ScriptField_RGB rgbs = new ScriptField_RGB(mRS, bitmap.getWidth()*bitmap.getHeight());
function_script.bind_rgb(rgbs);
这是我设置初始值的方式:
int index = 0;
for(int y = 0; y < bitmap.getHeight(); ++y) {
for(int x = 0; x < bitmap.getWidth(); ++x) {
int color = bitmap.getPixel(x, y);
ScriptField_RGB.Item i = new ScriptField_RGB.Item();
i.red = Color.red(color) / 255.0f;
i.green = Color.green(color) / 255.0f;
i.blue = Color.blue(color) / 255.0f;
rgbs.set(i, index, false);
index++;
}
}
rgbs.copyAll();
'function_script' 是一个带有内核的脚本来填充'RGB_t*',它就是这样的:
#pragma version(1)
#pragma rs java_package_name(my.package)
#include "rgb.rs"
void __attribute__((kernel)) root(RGB_t pixel, uint32_t x) {
//rsDebug("before", rgb[x].red,rgb[x].green,rgb[x].blue);
rgb[x].red = pixel.red * 255.0f;
rgb[x].green = pixel.green * 255.0f;
rgb[x].blue = pixel.blue * 255.0f;
//rsDebug("after", rgb[x].red,rgb[x].green,rgb[x].blue);
}
运行这个内核:
function_script.forEach_root(arrayOperational);
不会在 Android 层更新我的 ScriptField 值。我仍然保留着我之前确定的旧价值观。
所以如果我打电话:
rgbs.get(index)
当然,在“foreach root”调用之后,我会得到我原来的值。
如何在 Android 层中反映我的更改?
【问题讨论】:
标签: java android pointers struct renderscript