Renderscript,`in`参数是什么?

时间:2015-06-14 16:51:59

标签: android renderscript

我想了解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指向什么?第一个像素?所以,如果我想访问下一个像素,我应该增加一个?

2 个答案:

答案 0 :(得分:2)

uchar4float3类型与您在OpenCL中找到的类型基本相同。它们是分别包含4和3个组分的向量值。 Renderscript提供了convert_float4()convert_uchar3()函数,可以在不同类型之间进行正确,快速的转换。

in参数本质上是指向内核运行的当前元素的指针。 xy值可以准确地告诉您Element Allocationin对应的{ "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;
}