Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正在处理3D渲染脚本分配,z属性不可用 背景_Java_Android_C99_Renderscript_Android Renderscript - Fatal编程技术网

Java 正在处理3D渲染脚本分配,z属性不可用 背景

Java 正在处理3D渲染脚本分配,z属性不可用 背景,java,android,c99,renderscript,android-renderscript,Java,Android,C99,Renderscript,Android Renderscript,我正在尝试使用RenderScript对3D分配执行一些操作 我在这里创建分配: Type.Builder analyzer3DType = new Type.Builder(rsAnalyzer, Element.U8(rsAnalyzer)) .setX(allocationSize.getWidth() - allocationPadding * 2) .setY(allocationSize.getHeight() - allocationPadding * 2

我正在尝试使用RenderScript对3D分配执行一些操作

我在这里创建分配:

 Type.Builder analyzer3DType = new Type.Builder(rsAnalyzer, Element.U8(rsAnalyzer))
      .setX(allocationSize.getWidth() - allocationPadding * 2)
      .setY(allocationSize.getHeight() - allocationPadding * 2)
      .setZ(framesNumber);

 analyzer3DAllocation = Allocation.createTyped(rsAnalyzer, analyzer3DType.create(), Allocation.USAGE_SCRIPT);
然后设置Java端并启动内核:

ScriptC_analyze rsAnalyze = new ScriptC_analyze(rsAnalyzer);
rsAnalyze.forEach_root(analyzer3DAllocation);
内核是这样的:

void RS_KERNEL root(uchar in, uint32_t x, uint32_t y, uint32_t z) {
   // Do something.
}
请注意,我需要两个不同的RenderScript上下文来并行执行,因此这就是我创建RenderScript对象的方式:

rsAnalyzer = RenderScript.createMultiContext(context, RenderScript.ContextType.NORMAL, RenderScript.CREATE_FLAG_NONE, 23);
问题 我得到以下运行时错误:

W/Adreno RS:RSDSetupInputOutAttributes:2051:输入参数数量不正确,应为:2实际1

W/Adreno RS:RSDScript InvokeForeach:2511:RSDSetupInputOutAttributes中的错误-30

如果不在根内核中插入z属性,问题就会消失。似乎z属性未被识别为特殊属性

我的目标是API 23,应该支持这个特殊属性。从文档中:

映射核函数或缩减核累加器函数可以使用特殊参数x、y和z访问当前执行的坐标,这些参数必须是int或uint32_t类型。这些参数是可选的

2015年10月7日,斯蒂芬·海因斯(Stephen Hines)写道:

唯一的自动填充参数是x、y(在Android M中可能是z)

我不完全确定API级别23是否支持z属性,但至少Android Studio这样认为

问题
  • 我做错什么了吗?有没有办法在API级别23的内核中使用z属性
  • 如果不是,那么如果我不仅需要在x和y轴上迭代元素,而且还需要沿着z轴迭代元素,那么实现这一点的最佳方法是什么
  • 提前感谢您的帮助

    补充资料 这是我的应用程序build.gradle的一部分:

    android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    
    defaultConfig {
        minSdkVersion 23
        targetSdkVersion 23
        renderscriptTargetApi 23
    }
    
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }
    

    因为我收到了一条错误消息:

    来自RSDSetupInputOutAttributes的错误-30

    我想当然地认为内核不工作,但它工作正常,特殊属性z可用并正确填充


    最重要的是,我在不同的设备上用相同的操作系统版本(华为P9)尝试了相同的应用程序,它没有给出任何错误。看来,2016年末由TIM operator推出的LG G4官方操作系统更新中,RenderScript实现存在部分缺陷。

    您使用的是什么设备和操作系统版本?LG G4(H815),TIM品牌,安卓6.0,内核3.10.84,build MRA58K,SW V20k-222-01即使出现错误,内核是否仍能正常工作?如果是这样,你可以忽略它。谢谢sakridge,我试图忽略错误消息,内核工作正常!您还可以只使用x,y启动一个二维内核,并在内核本身或作为多个forEach调用在z上执行循环。可能取决于z的大小,但我猜多个forEach可能会更快。但如果您发现了,请尝试并报告:)