2011-10-13 27 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));