2017-09-06 113 views
0

我已经写的很短的RS,但gradle这个同步的Android工作室给我之后错误的renderScript:不匹配功能rsGetElementAt_uchar4

Error:(8, 34) error: no matching function for call to 'rsGetElementAt_uchar4'

脚本:

#pragma version(1) 
#pragma rs java_package_name(xx.xxx.xxxxxxx) 

uchar4 road = 0; 
const uchar4 nothing = 0; 

void init() { 
    road.a = 0xff; 
} 

uchar4 __attribute__((kernel)) kernel(uchar4 original, uint32_t x, uint32_t y) { 
    uchar4 masked = rsGetElementAt_uchar4(extra_alloc, x, y)); 
    if (original.r != masked.r || original.g != masked.g || original.b != masked.b) { 
     return road; 
    } else { 
     return nothing; 
    } 
} 

在的build.gradle:

defaultConfig { 
    applicationId "xx.xxx.xxxxxxx" 
    minSdkVersion 21 
    targetSdkVersion 26 
    versionCode 1 
    versionName "1.0" 
    renderscriptTargetApi 24 // I've tried almost every possible value 
    renderscriptSupportModeEnabled true 
} 

相同的代码,但使用API​​ 23的作品:

#pragma version(1) 
#pragma rs java_package_name(gl.kid.maptilt) 

uchar4 road = 0; // I don't know, how to declare uchar4, any advice? 
const uchar4 nothing = 0; 

void init() { 
    road.a = 0xff; 
} 

uchar4 __attribute__((kernel)) root(uchar4 original, uchar4 masked, uint32_t x, uint32_t y) { 
    if (original.r != masked.r || original.g != masked.g || original.b != masked.b) { 
     return road; 
    } else { 
     return nothing; 
    } 
} 
+0

哪里是'extra_alloc'的声明? – Dave

+0

@Dave omg,我会试着宣布它 –

+0

@Dave是的,它的工作,idk我是如何错过它的 –

回答

2

我将从一份声明开始,对RenderScript不太了解。这么说,我想你跟着类似this question代码,但你缺少行:

rs_allocation extra_alloc; 

注意在Java中,位在那里设置:

script.set_extra_alloc(inAllocationExtra);