从 C / JNI 调用 RenderScript

Calling RenderScript from C / JNI

我希望用更高效的东西替换 C atan2 函数。 RenderScript 确实提供 atan2,包括采用矢量的版本。

我找到的示例演示了从 Java 调用 RenderScript。是否可以从 C 代码调用 RS?举个例子就好了。

谢谢

它曾经是可能的,尽管 NDK 中的 RS 支持现在已经放弃了一段时间。它可能仍然是可能的,但即使是 NDK 样本也不再包含 RS 样本。从 Android 7 开始,您可以尝试使用 "Single Source RenderScript",描述为 here,这应该可以从 C/C++ 代码实现。

您可能会看到使用 RS 的效率提升是由于几个可能的原因(非常依赖于平台):

  1. RS 将对您的数据集进行并行操作。在某些情况下,您正在调用的函数(例如 atan2)可能会并行化操作。
  2. 您的 RS 代码可能在协处理器(例如 GPU 或 DSP)上执行。
  3. RS 提供的内部函数和库函数针对平台进行了高度优化。再次以 atan2 为例,RS 核心中的函数可能比标准 C 库中的函数更优化,因为它可能使用协处理器,或者可能使用特定于体系结构的优化实现(汇编).

综上所述,在 RS space (Allocation) 之间将数据移回非 RS 代码时,您的代码可能会受到 I/O 的影响。

我找到了两个例子;这是我要构建的 运行:

https://github.com/adhere/NDKCallRenderScriptDemo

我一直在搜索 C++ 的文档API,但没有找到。