2011-10-13 15 views
9

Estoy intentando añadir algunos efects a la cámara en Android, he encontrado algunas cosas en Internet, pero me quedé atrapado al crear la textura,int matriz para la textura de OpenGL en Android

utilizo la funcion decodeYUV420SP () que me devuelve una matriz RGB int [ancho * alto] con los valores hexadecimales en cada posición de la matriz,

Ahora, quiero crear una textura OpenGL de esta matriz pero no sé cómo, puedo convertir cada valor hexadecimal a su R_G_B separado y lo puso en opengl pero no funciona Hago algo como esto:

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 

    } 

para convertir el valor hexadecimal para RGBA (de 0 a 255)

Y hago esto para convertirlo en la textura de 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); 

Sin embargo algo es worng, porque no lo hace trabajar ...

¿Alguna idea?

Respuesta

2

¿Por qué intentas envolver tu matriz int como un FloatBuffer? La mayoría de tus conversiones son innecesarias.

Simplemente tome su textura original, envuélvala en un bytebuffer y páselo a glTexImage con el tipo GL_UNSIGNED_BYTE. No es necesario crear una nueva matriz a partir de lo que ya tiene.

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

Cuestiones relacionadas