2014-03-07 3 views
0

다음 코드로 Android Studio를 사용하는 copyfrom 메소드를 사용하여 Float2 변수의 배열을 Renderscript에 전달하려고합니다. 정수에 대한 첫 번째 예제는 IDE에서 허용하지만 float 또는 float2에 대한 두 번째 예제는 그렇지 않습니다. IDE는 다음과 같은 오류를 반환 Java에서 Renderscript로 Float2 배열을 전달하는 방법

Cannot resolve method 'copyFrom(java.lang.Float2[])' 

올바른 방법 또는 구문에 대한 어떤 제안

Cannot resolve method 'copyFrom(java.lang.Float[])' 

이 감사합니다.

mRS = RenderScript.create(this); 

    int[] inputData1 = new int[10]; 
    Float[] inputData2 = new Float[10]; 
    Float2[] inputData3 = new Float2[10];  

    inputData1[0] = 1; 

    inputData2[0] = 1.0f; 

    inputData3[0].x = 1.0f; 
    inputData3[0].y = 1.0f; 


    Allocation mInAlloc1 = Allocation.createSized(mRS, Element.I32(mRS), 10, Allocation.USAGE_SCRIPT); 
    mInAlloc1.copyFrom(inputData1); 

    Allocation mInAlloc2 = Allocation.createSized(mRS, Element.F32(mRS), 10, Allocation.USAGE_SCRIPT); 
    mInAlloc2.copyFrom(inputData2); 

    Allocation mInAlloc3 = Allocation.createSized(mRS, Element.F32_2(mRS), 10, Allocation.USAGE_SCRIPT); 
    mInAlloc3.copyFrom(inputData3); 

편집 : 나는 이클립스에서 동일한 코드를 시도하고 약간 다른 오류 얻을 수있다

: 나는 BaseObj []에 유형을 변경 제안에

The method copyFrom(BaseObj[]) in the type Allocation is not applicable for the arguments (Float[]) 

을하지만,에 그러면 IDE가 Float로 변경해야한다고 불평합니다. 약간 재귀적인 것 같습니다.

답변

0

Java 코드에서 네이티브 표현이없는 RenderScript 유형은 약간 더 어렵습니다. 벡터 유형을 처리하는 가장 좋은 방법은 "copyFromUnchecked"입니다. 따라서 10x, float2로 할당 한 경우 20 개의 요소 Java float 배열을 만듭니다. 주소 지정은 [요소 * 2 + 구성 요소]

복사 루틴의 "검사되지 않은"변형은 이러한 복사본을 허용하는 유형 검사를 더 적게 수행합니다. Float2의 배열에서와 같이 객체 배열을 사용하는 것보다 훨씬 효율적입니다.

코드를 다시 읽는 것을 깨달았습니다. 문제는 Float 대 float입니다. RenderScript 복사 명령은 객체 배열이 아닌 원시 배열에서 작동하도록 설계되었습니다.

+0

답장을 보내 주셔서 감사합니다. copyFromUnchecked를 의미합니까? 나는 그것을 시도했지만 여전히 IDE에서 같은 오류가 발생했습니다. 또한 Float의 경우에도 같지만 대상 배열 크기는 동일하게 유지합니다. – AJR

+0

나는 대답을 편집했다, 나는 또한 당신이 Float과 다른 float을 치고 있다고 생각한다. –

관련 문제