【问题标题】:Floating point allocations with USAGE_GRAPHICS_TEXTURE使用 USAGE_GRAPHICS_TEXTURE 的浮点分配
【发布时间】:2014-04-21 05:06:19
【问题描述】:

我正在使用 Renderscript 设计算法的实现。该算法可以使用 OpenGL ES 着色器计算,但结果必须是浮点数,或者至少是半浮点数。 iOS 支持使用该类型映射 GPU 内存,但根据我从阅读 Android 源代码中收集到的信息,Android 中的 gralloc/GraphicBuffers 仅支持无符号字符数据。

在具有 OpenGL ES 3.0 或适当扩展的设备中,是否真的可以在纹理内存中创建浮点类型的分配,将其用作目标,然后从中读取结果?如有必要,我可以使用 NDK 中的 Renderscript。

谢谢。

【问题讨论】:

    标签: android-ndk renderscript


    【解决方案1】:

    这取决于。 RenderScript 支持浮点分配。您可以使用内核输入、输出和 get/setElementAt 来读/写它们。

    纹理采样器支持仅限于 UCHAR 缓冲区。因此,如果您想要的不仅仅是点过滤,您将需要使用 rsGetElementAt_float4() 来构建它。 (或您选择使用的任何数据类型)。

    【讨论】:

    • 对不起,如果这很明显,但是如果纹理采样器仅限于 uchar,这是否意味着脚本将在 CPU 上运行?如果我正确阅读了源代码,则纹理内存中的分配是使用 gralloc 创建的,它仅支持 uchar 数据。如果分配内存是作为常规 OpenGL 纹理(或等效对象)分配的,那么读取它会很慢,对吧? (我需要在 RS 脚本运行后从 CPU 访问结果)。
    • 如果您使用浮点分配调用 rsSample(),它只会返回默认颜色并跳过读取。 RS 计算不位于 OpenGL 之上,因此您真的无法根据其他规范对其行为做出假设。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-06
    • 2021-01-26
    • 2015-07-21
    • 1970-01-01
    相关资源
    最近更新 更多