Android Renderscript,`in`参数是什么?

Android Renderscript,`in`参数是什么?,android,renderscript,Android,Renderscript,我正在努力理解Renderscript。谁能看一下这个代码,让我知道中的参数是什么?它不是分配对象,所以它是元素?那么为什么它是一个数组呢 (我从这里得到了代码,并对其进行了修改) 这一行转换\u float4(在[0]中)的功能是什么? 索引0指向什么?第一个像素?因此,如果我想访问下一个像素,我应该将其增加1?uchar4和float3类型基本上与OpenCL中的相同。它们是分别包含4和3个分量的向量值。Renderscript提供了convert\u float4()和convert\u

我正在努力理解Renderscript。谁能看一下这个代码,让我知道中的
参数是什么?它不是分配对象,所以它是元素?那么为什么它是一个数组呢

(我从这里得到了代码,并对其进行了修改)

这一行
转换\u float4(在[0]中)的功能是什么?

索引0指向什么?第一个像素?因此,如果我想访问下一个像素,我应该将其增加1?

uchar4
float3
类型基本上与OpenCL中的相同。它们是分别包含4和3个分量的向量值。Renderscript提供了
convert\u float4()
convert\u uchar3()
函数,用于在不同类型之间进行正确、快速的转换


中的
参数本质上是指向内核正在运行的当前元素的指针。
x
y
值准确地告诉您
分配中的
对应的
元素
。您不应尝试将其用作数组并直接访问其他元素。如果这样做,您可能会接触到进程无法访问的内存。Renderscript正在并行处理数据集,这可以在不同的线程或不同的处理器(GPU)上完成。这取决于硬件实现。

uchar4
float3
类型基本上与OpenCL中的类型相同。它们是分别包含4和3个分量的向量值。Renderscript提供了
convert\u float4()
convert\u uchar3()
函数,用于在不同类型之间进行正确、快速的转换


中的
参数本质上是指向内核正在运行的当前元素的指针。
x
y
值准确地告诉您
分配中的
对应的
元素
。您不应尝试将其用作数组并直接访问其他元素。如果这样做,您可能会接触到进程无法访问的内存。Renderscript正在并行处理数据集,这可以在不同的线程或不同的处理器(GPU)上完成。这取决于硬件实现。

拉里的回答很好地解释了如何处理这些矢量数据块

您可以使用我们的“按值传递”样式将其改写为更清晰的内容:

uchar4 RS_KERNEL root(uchar4 in, uint32_t x, uint32_t y) {
  // x and y aren't used, so you can remove those from the above signature too.
  uchar4 out;
  float3 pixel = convert_float4(in).rgb;

  pixel.r = (pixel.r + pixel.g + pixel.b)/3;
  // This seems buggy to me below, since pixel.r was just modified.
  // I think you need another temporary variable (assuming you are trying to make this work and getting weird behavior).
  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);
  return out;
}

拉里的回答很好地解释了如何处理这些矢量数据

您可以使用我们的“按值传递”样式将其改写为更清晰的内容:

uchar4 RS_KERNEL root(uchar4 in, uint32_t x, uint32_t y) {
  // x and y aren't used, so you can remove those from the above signature too.
  uchar4 out;
  float3 pixel = convert_float4(in).rgb;

  pixel.r = (pixel.r + pixel.g + pixel.b)/3;
  // This seems buggy to me below, since pixel.r was just modified.
  // I think you need another temporary variable (assuming you are trying to make this work and getting weird behavior).
  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);
  return out;
}

“in”有多少个职位?我怎么知道它的尺寸?无论我输入什么数字,它都不会抛出一个越界错误*in只是您在Java中创建的分配的单个单元格的占位符。您不能使用它来索引除[0]或*in之外的任何内容(它们是等效的)。“in”有多少个位置?我怎么知道它的尺寸?无论我输入什么数字,它都不会抛出一个越界错误*in只是您在Java中创建的分配的单个单元格的占位符。您不能使用它来索引除[0]或*in之外的任何内容(它们是等效的)。我也一样,谢谢你,斯蒂芬!感谢您的反馈,并用kennel的value argument版本进行了出色的重新编写。我尝试了您的代码,我得到了以下信息:/home/Projects/android/foo master/app/src/main/rs/pixelsCalc.rs:8:17:错误:预期';'在顶层声明之后,这意味着第8行第17列出现了某种类型的打字错误。我上面写的代码与llvm-rs-cc配合使用效果很好。谢谢,Stephen!感谢您的反馈,并用kennel的value argument版本进行了出色的重新编写。我尝试了您的代码,我得到了以下信息:/home/Projects/android/foo master/app/src/main/rs/pixelsCalc.rs:8:17:错误:预期';'在顶层声明之后,这意味着第8行第17列出现了某种类型的打字错误。我上面写的代码与llvm-rs-cc配合使用效果很好。谢谢!我会利用你们的反馈,修改我的代码。事情现在更清楚了。谢谢!我会利用你们的反馈,修改我的代码。事情现在更清楚了。