int数组在android中的opengl纹理

我试图在Android中添加一些效果到相机中,我在互联网上发现了一些东西,但是在创build纹理时卡住了,

我使用函数decodeYUV420SP(),它返回一个int [width * height] RGB数组,每个数组的位置都带有hex值,

现在,我想创build一个这个数组的OpenGL纹理,但我不知道如何,我可以将每个hex值转换为它的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 } 

要将hex值转换为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); 

然而,有些事情,因为它不工作…

任何想法?

Solutions Collecting From Web of "int数组在android中的opengl纹理"

为什么你尝试将你的int数组作为FloatBuffer包装? 你的大部分转换是不必要的。

只要把你的原始纹理,包装在一个字节缓冲区,并将其传递给GL_UNSIGNED_BYTEtypes的glTexImage。 没有必要从你已经有的创build一个新的数组。

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