【问题标题】:Compiling renderscript source code编译renderscript源代码
【发布时间】:2014-03-27 10:43:12
【问题描述】:

正如我在上一篇文章 (Compiling renderscript code at runtime) 中提到的,我尝试在运行时编译渲染脚本代码。 正如 Kietz 所建议的,我需要更改所有生成的 java 类从中派生的 ScriptC 类。 制作我自己的扩展 Script 的类失败,因为我无法调用这个超类的构造函数。

这个sn-p的代码

public class RuntimeScriptC extends Script {
       private static final String TAG = "RuntimeScriptC";

   protected RuntimeScriptC(int id, RenderScript rs) {            
       super(id, rs);       

   }

给我这个错误:

The constructor Script(int, RenderScript) is undefined

我的下一个想法是将自己的类添加到renderscript源代码中并编译它以创建 一个新的.jar。我在git 上找到了源代码,但不知道如何只构建 renderscript 包。

编辑: 我刚刚发现Script.java 的构造函数是包私有的。这就是为什么我不能在我自己的类中访问构造函数。如果我可以自己编译渲染脚本源,我可以将自己的类放入包中并访问它。

新问题:在哪里可以找到渲染脚本源以及如何编译它们?

【问题讨论】:

    标签: java android git renderscript


    【解决方案1】:

    可以在 android.googlesource.com 找到 RenderScript 的源代码,以及 Android 其他部分的源代码。如果您想重建 Android 或其中的一部分,here 可能是一个不错的起点。

    但是,这太过分了。如果不能直接修改ScriptC,直接继承即可。这是可能的,因为您需要来自ScriptC 的唯一方法是其受保护的构造函数。例如,我写了HackedScriptC,它只是将它的参数转发给ScriptC()

    package com.example.android.rs.extremehax;
    
    import android.content.res.Resources;
    import android.renderscript.RenderScript;
    import android.renderscript.ScriptC;
    
    public class HackedScriptC extends ScriptC {
    
        public HackedScriptC(RenderScript rs, Resources resources, int id) {
            // simple passthru to the only constructor that ScriptC_mono uses
            super(rs, resources, id);
        }
    
    }
    

    现在可以在胶水类中替换ScriptC

    package com.example.android.rs.extremehax;
    // ...     
    public class ScriptC_mono extends HackedScriptC { 
        // otherwise identical glue class...
    

    在您的情况下,您不会调用超级构造函数ScriptC(RenderScript,Resources,int),因为它会调用您想要覆盖的internalCreate。相反,调用ScriptC(int,RenderScript)

    【讨论】:

    • 你最终重建了 RenderScript 吗?
    • 只重建renderscript部分并不容易。我必须编译完整的 android 包,所以这是不行的。在 internalCreate 中是一个 openRawResource 函数。 openRawResource 是 Resource 类的一个函数,我们制作了自己的 Resource 类,我们将其提供给 ScriptC 的构造函数。 openRawResource 现在指向我们自己选择的目录,我们可以在其中添加/更改 .bc 文件。
    • 你有机会分享你的源码吗?我对你的项目结果很感兴趣
    • 我不知道我可以分享我们的代码,因为它是为了论文。我会询问公司我可以做什么和不可以做什么,并会尽快通知您!
    • 抱歉回复时间长。但是我们已经在github 上发布了带有 MIT 许可证的源代码。该项目尚未完全调试,但应该相当稳定。很快就会有一个关于如何设置渲染脚本编译服务器以及如何连接应用程序的自述文件。我认为您希望看到的是“src/com/denayer/ovsr/MyResources.java”文件及其在“src/com/denayer/ovsr/RsScript.java”中的实现(RenderScriptTemplate 函数)。如果您想了解更多信息,请随时回复或通过许可证中的电子邮件发送给我。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多