我想了解Renderscript。有人可以查看这段代码,让我知道in
参数是什么?它不是Allocation对象,所以它是一个Element?为什么它是一个阵列呢?
(我从这里获得了代码,并对其进行了修改,http://www.jayway.com/2014/02/11/renderscript-on-android-basics/)
#pragma version(1)
#pragma rs java_package_name(foo.bar)
rs_allocation inPixels;
int height;
int width;
void root(const uchar4 *in, uchar4 *out, uint32_t x, uint32_t y) {
float3 pixel = convert_float4(in[0]).rgb;
pixel.r = (pixel.r + pixel.g + pixel.b)/3;
pixel.g = (pixel.r + pixel.g + pixel.b)/3;
pixel.b = (pixel.r + pixel.g + pixel.b)/3;
int topRight
//float4 f4 = rsUnpackColor8888(*(uchar*)rsGetElementAt(inPixels, x+1, y+1));
out->xyz = convert_uchar3(pixel);
}
这一行convert_float4(in[0])
做了什么?
指数0指向什么?第一个像素?所以,如果我想访问下一个像素,我应该增加一个?
答案 0 :(得分:2)
uchar4
和float3
类型与您在OpenCL中找到的类型基本相同。它们是分别包含4和3个组分的向量值。 Renderscript提供了convert_float4()
和convert_uchar3()
函数,可以在不同类型之间进行正确,快速的转换。
in
参数本质上是指向内核运行的当前元素的指针。 x
和y
值可以准确地告诉您Element
Allocation
中in
对应的{
"filter": {
"bool": {
"must": [
{
"regexp": {
"_uid": {
"value": ".*000ANT.*"
}
}
}
]
}
}
}
。您不应尝试将其用作数组并直接访问其他元素。如果这样做,则可能会触及您的进程无法访问的内存。 Renderscript正在并行处理您的数据集,可以在不同的线程或不同的处理器(GPU)上完成。这取决于硬件实现。
答案 1 :(得分:2)
Larry的回答是对如何处理这些矢量数据的一个很好的解释。
您可以使用我们的pass-by-value样式更改清楚这一点:
public int[] zeroMax(int[] nums) {
int acum = 0;
int i = 0;
for( i = 0; i < nums.length;i++){
if(nums[i]==0){
for(int j = i; j < nums.length;j++){
if (nums[j]%2!=0){
acum = nums[j];
break;
}
}
nums[i]=acum;
}
}
return nums;
}