2011-10-13 14 views
9

Sto cercando di aggiungere un po 'efects alla telecamera in Android, ho trovato alcune cose su internet, ma sono rimasto bloccato durante la creazione della trama,int array per tessitura opengl in Android

Io uso il funcion decodeYUV420SP () che mi restituisce una matrice RGB int [larghezza * altezza] con i valori esadecimali in ciascuna posizione dell'array,

Ora, voglio creare una trama openGL di questo array ma non so come, posso convertire ogni valore esadecimale al suo R_G_B separato e metterlo in opengl ma non funziona Io faccio qualcosa di simile:

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 

    } 

per convertire il valore esadecimale per RGBA (da 0 a 255)

E faccio questo per convertirlo alla texture 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); 

Tuttavia qualcosa è worng, perche 'non lo fa lavoro ...

Qualche idea?

risposta

2

Perché provate a racchiudere il vostro array int come FloatBuffer? La maggior parte delle conversioni non è necessaria.

Basta prendere la texture originale, avvolgerla in un bytebuffer e passarla a glTexImage con il tipo GL_UNSIGNED_BYTE. Non è necessario creare un nuovo array da quello che hai già.

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