2011-10-13 10 views
9

Próbuję dodać kilka Efects do aparatu w Androidzie, Znalazłem kilka rzeczy na internecie, ale utknąłem przy tworzeniu tekstury,int array OpenGL tekstury w android

używam función decodeYUV420SP (), która zwraca mi int [szerokość * wysokość] tablicy RGB z wartościami szesnastkowymi do każdej pozycji tablicy,

Teraz chcę utworzyć teksturę OpenGL tej tablicy, ale nie wiem jak, mogę przekonwertować każdą wartość szesnastkową do R_G_B oddzielić i umieścić go w opengl, ale to nie działa Zrobić coś takiego:

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 

    } 

Aby przeliczyć wartość hex do RGBA (od 0 do 255)

I to zrobić, aby przekształcić go OpenGL Tekstura:

 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); 

Jednak coś jest worng, bo to nie robi praca ...

Każdy pomysł?

Odpowiedz

2

Dlaczego próbujesz opakować swoją tablicę int jako FloatBuffer? Większość twoich konwersji jest niepotrzebna.

Po prostu weź oryginalną teksturę, umieść ją w buforze bajtów i przekaż ją do glTexImage z typem GL_UNSIGNED_BYTE. Nie ma potrzeby tworzenia nowej tablicy z tego, co już masz.

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

Powiązane problemy