INT массив для OpenGL текстуры в Android - PullRequest
9 голосов
/ 13 октября 2011

Я пытаюсь добавить некоторые эффекты на камеру в Android, Я нашел некоторые вещи в интернете, но застрял при создании текстуры,

Я использую функцию decodeYUV420SP (), которая возвращает мне массив RGB int [width * height] со значениями hex в каждой позиции массива,

Теперь я хочу создать текстуру 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);

Однако что-то беспокоит, потому что это не работает ...

Есть идеи?

1 Ответ

2 голосов
/ 11 августа 2012

Почему вы пытаетесь обернуть ваш массив int как FloatBuffer?В большинстве ваших преобразований нет необходимости.

Просто возьмите исходную текстуру, оберните ее в байтовый буфер и передайте ее glTexImage с типом GL_UNSIGNED_BYTE.Нет необходимости создавать новый массив из того, что у вас уже есть.

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

...