2011-10-13 50 views
9

我想一些efects添加到攝像機在Android中, 我在互聯網上找到了一些東西,但在創建紋理時我被困,int數組OpenGL的紋理安卓

我使用funcion decodeYUV420SP( ),它返回一個int [寬度*高度] RGB數組與十六進制值到每個數組的位置,

現在,我想創建此數組的OpenGL紋理,但我不知道如何,我可以將每個十六進制值把它的R_G_B分開並放到opengl中,但不起作用 我這樣做:

mNewTexture = new int[width*height*4] 
    for(int i=0; i<mRGB.length; i=i+4){ 

     mNewTexture[i] = getR(mRGB[i]) ;   //R 
     mNewTexture[i+1] = getG(mRGB[i]) ;   //G 
     mNewTexture[i+2] = getB(mRGB[i]) ;   //B 
     mNewTexture[i+3] = getA(mRGB[i]);  //A 

    } 

爲十六進制值轉換爲RGBA(從0到255)

而且我這樣做是爲了把它轉換成openGL的質地:

 gl.glBindTexture(GL10.GL_TEXTURE_2D, tex); 
     gl.glTexImage2D(GL10.GL_TEXTURE_2D, 0, GL10.GL_RGBA, 1024, 512, 0, GL10.GL_RGBA, GL10.GL_FLOAT, FloatBuffer.wrap(mNewTexture)); 
     gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR); 

然而事情是撥錯,因爲它不工作...

任何想法?

回答

2

你爲什麼試圖將你的int數組作爲FloatBuffer包裝?大部分轉化是不必要的。

把你的原始紋理,包裝在一個字節緩衝區,並將其傳遞給類型爲GL_UNSIGNED_BYTE的glTexImage。沒有必要從你已有的東西中創建一個新的數組。

gl.glTexImage2D(GL10.GL_TEXTURE_2D, 0, GL10.GL_RGBA, 1024, 512, 0, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, ByteBuffer.wrap(mRGB));